@sanity/orderable-document-list 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +2 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.esm.js +12 -8
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +12 -8
- package/lib/index.js.map +1 -1
- package/package.json +8 -6
- package/src/Document.tsx +2 -2
- package/src/desk-structure/orderableDocumentListDeskItem.ts +13 -6
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -80,6 +80,8 @@ export default defineConfig({
|
|
|
80
80
|
params: {
|
|
81
81
|
lang: 'en_US',
|
|
82
82
|
},
|
|
83
|
+
createIntent: false, // do not add an option for item creation
|
|
84
|
+
menuItems: [], // allow an array of `S.menuItem()` to be injected to orderable document list menu
|
|
83
85
|
// pass from the structure callback params above
|
|
84
86
|
S,
|
|
85
87
|
context,
|
package/lib/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {ComponentType} from 'react'
|
|
|
2
2
|
import type {ConfigContext} from 'sanity'
|
|
3
3
|
import {FieldDefinitionBase} from 'sanity'
|
|
4
4
|
import {ListItem} from 'sanity/desk'
|
|
5
|
+
import {MenuItem} from 'sanity/desk'
|
|
5
6
|
import {SortOrdering} from 'sanity'
|
|
6
7
|
import {StringDefinition} from 'sanity'
|
|
7
8
|
import {StructureBuilder} from 'sanity/desk'
|
|
@@ -17,6 +18,8 @@ export declare interface OrderableListConfig {
|
|
|
17
18
|
icon?: ComponentType
|
|
18
19
|
params?: Record<string, unknown>
|
|
19
20
|
filter?: string
|
|
21
|
+
menuItems?: MenuItem[]
|
|
22
|
+
createIntent?: boolean
|
|
20
23
|
context: ConfigContext
|
|
21
24
|
S: StructureBuilder
|
|
22
25
|
}
|
package/lib/index.esm.js
CHANGED
|
@@ -97,7 +97,7 @@ function Document(_ref2) {
|
|
|
97
97
|
children: /* @__PURE__ */jsxs(Flex, {
|
|
98
98
|
align: "center",
|
|
99
99
|
children: [/* @__PURE__ */jsx(Box, {
|
|
100
|
-
paddingX:
|
|
100
|
+
paddingX: 2,
|
|
101
101
|
style: {
|
|
102
102
|
flexShrink: 0
|
|
103
103
|
},
|
|
@@ -131,7 +131,6 @@ function Document(_ref2) {
|
|
|
131
131
|
style: {
|
|
132
132
|
width: "100%"
|
|
133
133
|
},
|
|
134
|
-
padding: 2,
|
|
135
134
|
children: /* @__PURE__ */jsx(Flex, {
|
|
136
135
|
flex: 1,
|
|
137
136
|
align: "center",
|
|
@@ -727,6 +726,8 @@ function orderableDocumentListDeskItem(config) {
|
|
|
727
726
|
const {
|
|
728
727
|
type,
|
|
729
728
|
filter,
|
|
729
|
+
menuItems = [],
|
|
730
|
+
createIntent,
|
|
730
731
|
params,
|
|
731
732
|
title,
|
|
732
733
|
icon,
|
|
@@ -745,6 +746,14 @@ function orderableDocumentListDeskItem(config) {
|
|
|
745
746
|
const listId = id != null ? id : "orderable-".concat(type);
|
|
746
747
|
const listIcon = icon != null ? icon : SortIcon;
|
|
747
748
|
const typeTitle = (_b = (_a = schema.get(type)) == null ? void 0 : _a.title) != null ? _b : type;
|
|
749
|
+
if (createIntent !== false) {
|
|
750
|
+
menuItems.push(S.menuItem().title("Create new ".concat(typeTitle)).intent({
|
|
751
|
+
type: "create",
|
|
752
|
+
params: {
|
|
753
|
+
type
|
|
754
|
+
}
|
|
755
|
+
}).serialize());
|
|
756
|
+
}
|
|
748
757
|
return S.listItem().title(listTitle).id(listId).icon(listIcon).child(Object.assign(S.documentTypeList(type).serialize(), {
|
|
749
758
|
// Prevents the component from re-rendering when switching documents
|
|
750
759
|
__preserveInstance: true,
|
|
@@ -758,12 +767,7 @@ function orderableDocumentListDeskItem(config) {
|
|
|
758
767
|
params,
|
|
759
768
|
client
|
|
760
769
|
},
|
|
761
|
-
menuItems: [S.menuItem().title("
|
|
762
|
-
type: "create",
|
|
763
|
-
params: {
|
|
764
|
-
type
|
|
765
|
-
}
|
|
766
|
-
}).serialize(), S.menuItem().title("Reset Order").icon(GenerateIcon).action("resetOrder").serialize(), S.menuItem().title("Toggle Increments").icon(SortIcon).action("showIncrements").serialize()]
|
|
770
|
+
menuItems: [...menuItems, S.menuItem().title("Reset Order").icon(GenerateIcon).action("resetOrder").serialize(), S.menuItem().title("Toggle Increments").icon(SortIcon).action("showIncrements").serialize()]
|
|
767
771
|
})).serialize();
|
|
768
772
|
}
|
|
769
773
|
export { orderRankField, orderRankOrdering, orderableDocumentListDeskItem };
|
package/lib/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/helpers/constants.ts","../src/helpers/initialRank.ts","../src/fields/orderRankField.ts","../src/fields/orderRankOrdering.ts","../src/OrderableContext.ts","../src/Document.tsx","../src/helpers/reorderDocuments.ts","../src/helpers/client.ts","../src/DraggableList.tsx","../src/DocumentListQuery.tsx","../src/DocumentListWrapper.tsx","../src/helpers/resetOrder.ts","../src/OrderableDocumentList.tsx","../src/desk-structure/orderableDocumentListDeskItem.ts"],"sourcesContent":["export const ORDER_FIELD_NAME = `orderRank` as const\n","import {LexoRank} from 'lexorank'\n\n// Use in initial value field by passing in the rank value of the last document\n// If not value passed, generate a sensibly low rank\nexport default function initialRank(lastRankValue = ``): string {\n const lastRank = lastRankValue ? LexoRank.parse(lastRankValue) : LexoRank.min()\n const nextRank = lastRank.genNext().genNext()\n\n return nextRank.toString()\n}\n","import {type ConfigContext, defineField} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\nimport initialRank from '../helpers/initialRank'\n\nexport type SchemaContext = Omit<ConfigContext, 'schema' | 'currentUser' | 'client'>\n\nexport interface RankFieldConfig {\n type: string\n}\n\nexport const orderRankField = (config: RankFieldConfig) => {\n if (!config?.type) {\n throw new Error(\n `\n type must be provided.\n Example: orderRankField({type: 'category'})\n `\n )\n }\n\n const {type} = config\n return defineField({\n title: 'Order Rank',\n readOnly: true,\n hidden: true,\n ...config,\n name: ORDER_FIELD_NAME,\n type: 'string',\n initialValue: async (p, {getClient}) => {\n const lastDocOrderRank = await getClient({apiVersion: '2021-09-01'}).fetch(\n `*[_type == $type]|order(@[$order] desc)[0][$order]`,\n {type, order: ORDER_FIELD_NAME}\n )\n return initialRank(lastDocOrderRank)\n },\n })\n}\n","import {SortOrdering} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\n\nexport const orderRankOrdering: SortOrdering = {\n title: 'Ordered',\n name: 'ordered',\n by: [{field: ORDER_FIELD_NAME, direction: 'asc'}],\n}\n","import React from 'react'\n\nexport interface OrderableContextValue {\n showIncrements?: boolean\n}\n\nexport const OrderableContext = React.createContext<OrderableContextValue>({})\n","import {useContext, useMemo, type ReactNode} from 'react'\nimport {ChevronDownIcon, ChevronUpIcon, DragHandleIcon} from '@sanity/icons'\nimport {AvatarCounter, Card, Box, Button, Flex, Text} from '@sanity/ui'\nimport {useSchema, SchemaType, PreviewCard, Preview} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport {OrderableContext} from './OrderableContext'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentProps {\n doc: SanityDocumentWithOrder\n entities: SanityDocumentWithOrder[]\n increment: (\n index: number,\n nextIndex: number,\n docId: string,\n entities: SanityDocumentWithOrder[]\n ) => void\n index: number\n isFirst: boolean\n isLast: boolean\n dragBadge: number | false\n}\n\nexport default function Document({\n doc,\n increment,\n entities,\n index,\n isFirst,\n isLast,\n dragBadge,\n}: DocumentProps) {\n const {showIncrements} = useContext(OrderableContext)\n const schema = useSchema()\n const router = usePaneRouter()\n const {ChildLink, groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n const pressed = currentDoc === doc._id || currentDoc === doc._id.replace(`drafts.`, ``)\n const selected = pressed && routerPanesState.length === groupIndex + 2\n\n const Link = useMemo(\n () =>\n function LinkComponent(linkProps: {children: ReactNode}) {\n return <ChildLink {...linkProps} childId={doc._id} />\n },\n [ChildLink, doc._id]\n )\n\n return (\n <PreviewCard\n __unstable_focusRing\n // @ts-expect-error\n as={Link}\n data-as=\"a\"\n data-ui=\"PaneItem\"\n radius={2}\n pressed={pressed}\n selected={selected}\n sizing=\"border\"\n tabIndex={-1}\n tone=\"inherit\"\n width=\"100%\"\n flex={1}\n >\n <Flex align=\"center\">\n <Box paddingX={3} style={{flexShrink: 0}}>\n <Text size={2}>\n <DragHandleIcon cursor=\"grab\" />\n </Text>\n </Box>\n {showIncrements && (\n <Flex style={{flexShrink: 0}} align=\"center\" gap={1} paddingRight={1}>\n <Button\n padding={2}\n mode=\"ghost\"\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + -1, doc._id, entities)}\n disabled={isFirst}\n icon={ChevronUpIcon}\n />\n <Button\n padding={2}\n mode=\"ghost\"\n disabled={isLast}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + 1, doc._id, entities)}\n icon={ChevronDownIcon}\n />\n </Flex>\n )}\n <Box style={{width: `100%`}} padding={2}>\n <Flex flex={1} align=\"center\">\n <Preview\n layout=\"default\"\n value={doc}\n schemaType={schema.get(doc._type) as SchemaType}\n />\n </Flex>\n </Box>\n {dragBadge && (\n <Card tone=\"default\" marginRight={4} radius={5}>\n <AvatarCounter count={dragBadge} />\n </Card>\n )}\n </Flex>\n </PreviewCard>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport type {PatchOperations} from 'sanity'\n\nimport {SanityDocumentWithOrder} from '../types'\nimport {ORDER_FIELD_NAME} from './constants'\n\nexport interface MaifestArgs {\n entities: SanityDocumentWithOrder[]\n selectedItems: SanityDocumentWithOrder[]\n isMovingUp: boolean\n curIndex: number\n nextIndex: number\n prevIndex: number\n}\n\nexport interface ReorderArgs {\n entities: SanityDocumentWithOrder[]\n selectedIds: string[]\n source: any\n destination: any\n}\n\nexport interface ReorderReturn {\n newOrder: SanityDocumentWithOrder[]\n patches: [string, PatchOperations][]\n message: any\n}\n\nfunction lexicographicalSort(a: SanityDocumentWithOrder, b: SanityDocumentWithOrder) {\n if (!a[ORDER_FIELD_NAME] || !b[ORDER_FIELD_NAME]) {\n return 0\n } else if (a[ORDER_FIELD_NAME] < b[ORDER_FIELD_NAME]) {\n return -1\n } else if (a[ORDER_FIELD_NAME] > b[ORDER_FIELD_NAME]) {\n return 1\n }\n return 0\n}\n\nexport const reorderDocuments = ({\n entities,\n selectedIds,\n source,\n destination,\n}: ReorderArgs): ReorderReturn => {\n const startIndex = source.index\n const endIndex = destination.index\n const isMovingUp = startIndex > endIndex\n const selectedItems = entities.filter((item) => selectedIds.includes(item._id))\n const message = [\n `Moved`,\n selectedItems.length === 1 ? `1 document` : `${selectedItems.length} documents`,\n isMovingUp ? `up` : `down`,\n `from position`,\n `${startIndex + 1} to ${endIndex + 1}`,\n ].join(' ')\n\n const {all, selected} = entities.reduce<{\n all: SanityDocumentWithOrder[]\n selected: SanityDocumentWithOrder[]\n }>(\n (acc, cur, curIndex) => {\n // Selected items get spread in below, so skip them here\n if (selectedIds.includes(cur._id)) {\n return {all: acc.all, selected: acc.selected}\n }\n\n // Drop selected items in\n if (curIndex === endIndex) {\n const prevIndex = curIndex - 1\n const prevRank = entities[prevIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[prevIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.min()\n\n const curRank = LexoRank.parse(entities[curIndex][ORDER_FIELD_NAME] as string)\n\n const nextIndex = curIndex + 1\n const nextRank = entities[nextIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[nextIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.max()\n\n let betweenRank = isMovingUp ? prevRank.between(curRank) : curRank.between(nextRank)\n\n // For each selected item, assign a new orderRank between now and next\n for (let selectedIndex = 0; selectedIndex < selectedItems.length; selectedIndex += 1) {\n selectedItems[selectedIndex][ORDER_FIELD_NAME] = betweenRank.toString()\n betweenRank = isMovingUp ? betweenRank.between(curRank) : betweenRank.between(nextRank)\n }\n\n return {\n // The `all` array gets sorted by order field later anyway\n // so that this probably isn't necessary ¯\\_(ツ)_/¯\n all: isMovingUp\n ? [...acc.all, ...selectedItems, cur]\n : [...acc.all, cur, ...selectedItems],\n selected: selectedItems,\n }\n }\n\n return {all: [...acc.all, cur], selected: acc.selected}\n },\n {all: [], selected: []}\n )\n\n const patches = selected.flatMap((doc) => {\n const docPatches: [string, PatchOperations][] = [\n [\n doc._id,\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ],\n ]\n\n // If it's a draft, we need to patch the published document as well\n if (doc._id.startsWith(`drafts.`) && doc.hasPublished) {\n docPatches.push([\n doc._id.replace(`drafts.`, ``),\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ])\n }\n\n return docPatches\n })\n\n // Safety-check to make sure everything is in order\n const allSorted = all.sort(lexicographicalSort)\n\n return {newOrder: allSorted, patches, message}\n}\n","import {useClient} from 'sanity'\n\nexport function useSanityClient() {\n return useClient({apiVersion: '2021-09-01'})\n}\n","import {useEffect, useState, useMemo, useCallback, CSSProperties} from 'react'\nimport {DragDropContext, Draggable, Droppable, type DropResult} from '@hello-pangea/dnd'\nimport {Box, Card, useToast} from '@sanity/ui'\nimport type {PatchOperations} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport Document from './Document'\nimport {reorderDocuments} from './helpers/reorderDocuments'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {useSanityClient} from './helpers/client'\nimport {SanityDocumentWithOrder} from './types'\n\ninterface ListSetting {\n isDuplicate: boolean\n isGhosting: boolean\n isDragging: boolean\n isSelected: boolean\n}\n\nexport interface DraggableListProps {\n data: SanityDocumentWithOrder[]\n listIsUpdating: boolean\n setListIsUpdating: (val: boolean) => void\n}\n\nconst getItemStyle = (\n draggableStyle: CSSProperties | undefined,\n itemIsUpdating: boolean\n): CSSProperties => ({\n userSelect: 'none',\n transition: `opacity 500ms ease-in-out`,\n opacity: itemIsUpdating ? 0.2 : 1,\n pointerEvents: itemIsUpdating ? `none` : undefined,\n ...draggableStyle,\n})\n\nconst cardTone = (settings: ListSetting) => {\n const {isDuplicate, isGhosting, isDragging, isSelected} = settings\n\n if (isGhosting) return `transparent`\n if (isDragging || isSelected) return `primary`\n if (isDuplicate) return `caution`\n\n return undefined\n}\n\nexport default function DraggableList({\n data,\n listIsUpdating,\n setListIsUpdating,\n}: DraggableListProps) {\n const toast = useToast()\n const router = usePaneRouter()\n const {groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n\n // Maintains local state order before transaction completes\n const [orderedData, setOrderedData] = useState<SanityDocumentWithOrder[]>(data)\n\n // Update local state when documents change from an outside source\n useEffect(() => {\n if (!listIsUpdating) setOrderedData(data)\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [data])\n\n const [draggingId, setDraggingId] = useState(``)\n const [selectedIds, setSelectedIds] = useState<string[]>(currentDoc ? [currentDoc] : [])\n\n const clearSelected = useCallback(() => setSelectedIds([]), [setSelectedIds])\n\n const handleSelect = useCallback(\n (clickedId: string, index: number, nativeEvent: MouseEvent) => {\n const isSelected = selectedIds.includes(clickedId)\n const selectMultiple = nativeEvent.shiftKey\n const isUsingWindows = navigator.appVersion.indexOf('Win') !== -1\n const selectAdditional = isUsingWindows ? nativeEvent.ctrlKey : nativeEvent.metaKey\n\n let updatedIds = []\n\n // No modifier keys pressed during click:\n // - update selected to just this one\n // - open document\n if (!selectMultiple && !selectAdditional) {\n return setSelectedIds([clickedId])\n }\n\n // If shift key was held, prevent default to avoid new window opening\n if (selectMultiple) {\n nativeEvent.preventDefault()\n }\n\n // Shift key was held, add id's between last selected and this one\n // ...before adding this one\n if (selectMultiple && !isSelected) {\n const lastSelectedId = selectedIds[selectedIds.length - 1]\n const lastSelectedIndex = orderedData.findIndex((item) => item._id === lastSelectedId)\n\n const firstSelected = index < lastSelectedIndex ? index : lastSelectedIndex\n const lastSelected = index > lastSelectedIndex ? index : lastSelectedIndex\n\n const betweenIds = orderedData\n .filter((item, itemIndex) => itemIndex > firstSelected && itemIndex < lastSelected)\n .map((item) => item._id)\n\n updatedIds = [...selectedIds, ...betweenIds, clickedId]\n } else if (isSelected) {\n // Toggle off a single id\n updatedIds = selectedIds.filter((id) => id !== clickedId)\n } else {\n // Toggle on a single id\n updatedIds = [...selectedIds, clickedId]\n }\n\n return setSelectedIds(updatedIds)\n },\n [setSelectedIds, orderedData, selectedIds]\n )\n\n const client = useSanityClient()\n\n const transactPatches = useCallback(\n async (patches: [string, PatchOperations][], message: string) => {\n const transaction = client.transaction()\n\n patches.forEach(([docId, ops]) => transaction.patch(docId, ops))\n\n await transaction\n .commit()\n .then((updated) => {\n clearSelected()\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `${\n updated.results.length === 1 ? `1 Document` : `${updated.results.length} Documents`\n } Reordered`,\n status: `success`,\n description: message,\n })\n })\n .catch(() => {\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `Reordering failed`,\n status: `error`,\n })\n })\n },\n [client, setDraggingId, clearSelected, setListIsUpdating, toast]\n )\n\n const handleDragEnd = useCallback(\n (result: DropResult | undefined, entities: SanityDocumentWithOrder[]) => {\n setDraggingId(``)\n\n const {source, destination, draggableId} = result ?? {}\n\n // Don't do anything if nothing changed\n if (source?.index === destination?.index) return\n\n // Don't do anything if we don't have the entitites\n if (!entities?.length || !draggableId) return\n\n // A document can be dragged without being one-of-many-selected\n const effectedIds = selectedIds?.length ? selectedIds : [draggableId]\n\n // Don't do anything if we don't have ids to effect\n if (!effectedIds?.length) return\n\n // Update state to update styles + prevent data refetching\n setListIsUpdating(true)\n setSelectedIds(effectedIds)\n\n const {newOrder, patches, message} = reorderDocuments({\n entities,\n selectedIds: effectedIds,\n source,\n destination,\n })\n\n // Update local state\n if (newOrder?.length) {\n setOrderedData(newOrder)\n }\n\n // Transact new order patches\n if (patches?.length) {\n transactPatches(patches, message)\n }\n },\n [selectedIds, setDraggingId, setSelectedIds, transactPatches, setListIsUpdating]\n )\n\n const handleDragStart = useCallback(\n (start: {draggableId: string}) => {\n const id = start.draggableId\n const selected = selectedIds.includes(id)\n\n // if dragging an item that is not selected - unselect all items\n if (!selected) clearSelected()\n\n setDraggingId(id)\n },\n [selectedIds, clearSelected, setDraggingId]\n )\n\n // Move one document up or down one place, by fake invoking the drag function\n const incrementIndex = useCallback(\n (shiftFrom: number, shiftTo: number, id: string, entities: SanityDocumentWithOrder[]) => {\n const result = {\n draggableId: id,\n source: {index: shiftFrom},\n destination: {index: shiftTo},\n }\n\n return handleDragEnd(result as DropResult, entities)\n },\n [handleDragEnd]\n )\n\n const onWindowKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n clearSelected()\n }\n },\n [clearSelected]\n )\n\n useEffect(() => {\n window.addEventListener('keydown', onWindowKeyDown)\n\n return () => {\n window.removeEventListener('keydown', onWindowKeyDown)\n }\n }, [onWindowKeyDown])\n\n // Find all items with duplicate order field\n const duplicateOrders = useMemo(() => {\n if (!orderedData.length) return []\n\n const orderField = orderedData.map((item) => item[ORDER_FIELD_NAME])\n\n return orderField.filter((item, index) => orderField.indexOf(item) !== index)\n }, [orderedData])\n\n const onDragEnd = useCallback(\n (result: DropResult) => handleDragEnd(result, orderedData),\n [orderedData, handleDragEnd]\n )\n\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={onDragEnd}>\n <Droppable droppableId=\"documentSortZone\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {orderedData.map((item, index) => (\n <Draggable\n key={`${item._id}-${item[ORDER_FIELD_NAME]}`}\n draggableId={item._id}\n index={index}\n // onClick={(event) => handleDraggableClick(event, provided, snapshot)}\n >\n {(innerProvided, innerSnapshot) => {\n const isSelected = selectedIds.includes(item._id)\n const isDragging = innerSnapshot.isDragging\n const isGhosting = Boolean(!isDragging && draggingId && isSelected)\n const isUpdating = listIsUpdating && isSelected\n const isDisabled = Boolean(!item[ORDER_FIELD_NAME])\n const isDuplicate = duplicateOrders.includes(item[ORDER_FIELD_NAME])\n const tone = cardTone({isDuplicate, isGhosting, isDragging, isSelected})\n const selectedCount = selectedIds.length\n\n const dragBadge = isDragging && selectedCount > 1 ? selectedCount : false\n\n return (\n <div\n ref={innerProvided.innerRef}\n {...innerProvided.draggableProps}\n {...innerProvided.dragHandleProps}\n style={\n isDisabled\n ? {opacity: 0.2, pointerEvents: `none`}\n : getItemStyle(innerProvided.draggableProps.style, isUpdating)\n }\n >\n <Box paddingBottom={1}>\n <Card\n tone={tone}\n shadow={isDragging ? 2 : undefined}\n radius={2}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={(e) => handleSelect(item._id, index, e.nativeEvent)}\n >\n <Document\n doc={item}\n entities={orderedData}\n increment={incrementIndex}\n index={index}\n isFirst={index === 0}\n isLast={index === orderedData.length - 1}\n dragBadge={dragBadge}\n />\n </Card>\n </Box>\n </div>\n )\n }}\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n )\n}\n","import {useEffect, useMemo, useState} from 'react'\nimport {Box, Flex, Container, Spinner, Stack, Text} from '@sanity/ui'\n\nimport {useListeningQuery, Feedback} from 'sanity-plugin-utils'\nimport DraggableList from './DraggableList'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentListQueryProps {\n type: string\n filter?: string\n params?: Record<string, unknown>\n}\n\nconst DEFAULT_PARAMS = {}\n\nexport default function DocumentListQuery({\n type,\n filter,\n params = DEFAULT_PARAMS,\n}: DocumentListQueryProps) {\n const [listIsUpdating, setListIsUpdating] = useState(false)\n const [data, setData] = useState<SanityDocumentWithOrder[] | null>([])\n\n const query = `*[_type == $type ${filter ? `&& ${filter}` : ''}]|order(@[$order] asc){\n _id, _type, ${ORDER_FIELD_NAME}\n }`\n const queryParams = {\n ...params,\n type,\n order: ORDER_FIELD_NAME,\n }\n\n const {\n data: queryData,\n loading,\n error,\n } = useListeningQuery<SanityDocumentWithOrder[]>(query, {\n params: queryParams,\n initialValue: [],\n })\n\n useEffect(() => {\n if (queryData) {\n const filteredDocuments = queryData.reduce<SanityDocumentWithOrder[]>((acc, cur) => {\n if (!cur._id.startsWith(`drafts.`)) {\n // eslint-disable-next-line max-nested-callbacks\n const alsoHasDraft = queryData.some((doc) => doc._id === `drafts.${cur._id}`)\n return alsoHasDraft ? acc : [...acc, cur]\n }\n\n // Check if the draft has a published version\n cur.hasPublished = queryData.some((doc) => doc._id === cur._id.replace(`drafts.`, ``))\n\n return [...acc, cur]\n }, [])\n\n setData(filteredDocuments)\n } else {\n setData([])\n }\n }, [queryData])\n\n const unorderedDataCount = useMemo(\n () => (data?.length ? data.filter((doc) => !doc[ORDER_FIELD_NAME]).length : 0),\n [data]\n )\n\n if (loading) {\n return (\n <Flex style={{width: `100%`, height: `100%`}} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n if (error) {\n return (\n <Box padding={2}>\n <Feedback tone=\"critical\" title=\"There was an error\" description=\"Please try again later\" />\n </Box>\n )\n }\n\n if (!data || data?.length == 0)\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n No documents of this type\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n\n return (\n <Stack space={1} style={{overflow: `auto`, height: `100%`}}>\n <Box padding={2}>\n {unorderedDataCount > 0 && (\n <Box marginBottom={2}>\n <Feedback\n tone=\"caution\"\n description={\n <>\n {unorderedDataCount}/{data?.length} documents have no order. Select{' '}\n <strong>Reset Order</strong> from the menu above to fix.\n </>\n }\n />\n </Box>\n )}\n <DraggableList\n data={data}\n listIsUpdating={listIsUpdating}\n setListIsUpdating={setListIsUpdating}\n />\n </Box>\n </Stack>\n )\n}\n","import {useEffect, useMemo} from 'react'\nimport {useToast} from '@sanity/ui'\n\nimport {useSchema} from 'sanity'\nimport {Box, type ToastParams} from '@sanity/ui'\nimport {Feedback} from 'sanity-plugin-utils'\nimport DocumentListQuery from './DocumentListQuery'\nimport {OrderableContext} from './OrderableContext'\n\nimport {ORDER_FIELD_NAME} from './helpers/constants'\n\nexport interface DocumentListWrapperProps {\n showIncrements: boolean\n type: string\n resetOrderTransaction: ToastParams\n // eslint-disable-next-line react/require-default-props\n filter?: string\n // eslint-disable-next-line react/require-default-props\n params?: Record<string, unknown>\n}\n\n// 1. Validate first that the schema has been configured for ordering\n// 2. Setup context for showIncrements\nexport default function DocumentListWrapper({\n type,\n showIncrements,\n resetOrderTransaction,\n filter,\n params,\n}: DocumentListWrapperProps) {\n const toast = useToast()\n const schema = useSchema()\n\n useEffect(() => {\n if (resetOrderTransaction?.title && resetOrderTransaction?.status) {\n toast.push(resetOrderTransaction)\n }\n }, [resetOrderTransaction, toast])\n\n const schemaIsInvalid = useMemo(() => {\n // Option not passed\n if (!type) {\n return (\n <>\n No <code>type</code> was configured\n </>\n )\n }\n\n const typeSchema = schema.get(type)\n\n // Schema not found\n if (!typeSchema) {\n return (\n <>\n Schema <code>{type}</code> not found\n </>\n )\n }\n\n // Schema lacks an order field\n if (\n !('fields' in typeSchema) ||\n !typeSchema.fields.some((field) => field?.name === ORDER_FIELD_NAME)\n ) {\n return (\n <>\n Schema <code>{type}</code> must have an <code>{ORDER_FIELD_NAME}</code> field of type{' '}\n <code>string</code>\n </>\n )\n }\n\n // Schema's order field is not a string\n if (\n 'fields' in typeSchema &&\n typeSchema.fields.some(\n (field) => field?.name === ORDER_FIELD_NAME && field?.type?.name !== 'string'\n )\n ) {\n return (\n <>\n <code>{ORDER_FIELD_NAME}</code> field on Schema <code>{type}</code> must be{' '}\n <code>string</code> type\n </>\n )\n }\n\n return ''\n }, [type, schema])\n\n if (schemaIsInvalid) {\n return (\n <Box padding={2}>\n <Feedback description={schemaIsInvalid} tone=\"caution\" />\n </Box>\n )\n }\n\n return (\n <OrderableContext.Provider value={{showIncrements}}>\n <DocumentListQuery type={type} filter={filter} params={params} />\n </OrderableContext.Provider>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport {SanityClient} from '@sanity/client'\nimport {ORDER_FIELD_NAME} from './constants'\n// Function to wipe and re-do ordering with LexoRank\n// Will at least attempt to start with the current order\nexport async function resetOrder(type = ``, client: SanityClient) {\n const query = `*[_type == $type]|order(@[$order] asc)._id`\n const queryParams = {type, order: ORDER_FIELD_NAME}\n const documents = await client.fetch(query, queryParams)\n\n if (!documents.length) {\n return null\n }\n\n const transaction = client.transaction()\n let aLexoRank = LexoRank.min()\n\n for (let index = 0; index < documents.length; index += 1) {\n // Generate next rank before even the first document so there's room to move!\n aLexoRank = aLexoRank.genNext().genNext()\n\n transaction.patch(documents[index], {\n set: {[ORDER_FIELD_NAME]: aLexoRank.toString()},\n })\n }\n\n return transaction\n .commit()\n .then((update) => update)\n .catch((err) => err)\n}\n","import {Component} from 'react'\n\nimport {SanityClient} from '@sanity/client'\nimport type {ToastParams} from '@sanity/ui'\nimport DocumentListWrapper from './DocumentListWrapper'\nimport {resetOrder} from './helpers/resetOrder'\n\nexport interface OrderableDocumentListProps {\n options: {\n type: string\n client: SanityClient\n filter?: string\n params?: Record<string, unknown>\n }\n}\n\ninterface State {\n showIncrements: boolean\n resetOrderTransaction: ToastParams\n}\n\n// Must use a Class Component here so the actionHandlers can be called\nexport default class OrderableDocumentList extends Component<OrderableDocumentListProps, State> {\n constructor(props: OrderableDocumentListProps) {\n super(props)\n this.state = {\n showIncrements: false,\n resetOrderTransaction: {},\n }\n }\n\n actionHandlers = {\n showIncrements: () => {\n this.setState((state) => ({\n showIncrements: !state.showIncrements,\n }))\n },\n\n resetOrder: async () => {\n this.setState(() => ({\n resetOrderTransaction: {\n status: `info`,\n title: `Reordering started...`,\n closable: true,\n },\n }))\n\n const update = await resetOrder(this.props.options.type, this.props.options.client)\n\n const reorderWasSuccessful = update?.results?.length\n\n this.setState(() => ({\n resetOrderTransaction: {\n status: reorderWasSuccessful ? `success` : `info`,\n title: reorderWasSuccessful\n ? `Reordered ${update.results.length === 1 ? `Document` : `Documents`}`\n : `Reordering failed`,\n closable: true,\n },\n }))\n },\n }\n\n render() {\n const type = this?.props?.options?.type\n if (!type) {\n return null\n }\n return (\n <DocumentListWrapper\n filter={this?.props?.options?.filter}\n params={this?.props?.options?.params}\n type={type}\n showIncrements={this.state.showIncrements}\n resetOrderTransaction={this.state.resetOrderTransaction}\n />\n )\n }\n}\n","import {GenerateIcon, SortIcon} from '@sanity/icons'\nimport type {ConfigContext} from 'sanity'\n\nimport {ComponentType} from 'react'\nimport {StructureBuilder, type ListItem} from 'sanity/desk'\nimport OrderableDocumentList from '../OrderableDocumentList'\n\nexport interface OrderableListConfig {\n type: string\n id?: string\n title?: string\n icon?: ComponentType\n params?: Record<string, unknown>\n filter?: string\n context: ConfigContext\n S: StructureBuilder\n}\n\nexport function orderableDocumentListDeskItem(config: OrderableListConfig): ListItem {\n if (!config?.type || !config.context || !config.S) {\n throw new Error(`\n type, context and S (StructureBuilder) must be provided.\n context and S are available when configuring structure.\n Example: orderableDocumentListDeskItem({type: 'category'})\n `)\n }\n\n const {type, filter, params, title, icon, id, context, S} = config\n const {schema, getClient} = context\n const client = getClient({apiVersion: '2021-09-01'})\n\n const listTitle = title ?? `Orderable ${type}`\n const listId = id ?? `orderable-${type}`\n const listIcon = icon ?? SortIcon\n const typeTitle = schema.get(type)?.title ?? type\n\n return S.listItem()\n .title(listTitle)\n .id(listId)\n .icon(listIcon)\n .child(\n Object.assign(S.documentTypeList(type).serialize(), {\n // Prevents the component from re-rendering when switching documents\n __preserveInstance: true,\n // Prevents the component from NOT re-rendering when switching listItems\n key: listId,\n\n type: 'component',\n component: OrderableDocumentList,\n options: {type, filter, params, client},\n menuItems: [\n S.menuItem()\n .title(`Create new ${typeTitle}`)\n .intent({type: 'create', params: {type}})\n .serialize(),\n S.menuItem().title(`Reset Order`).icon(GenerateIcon).action(`resetOrder`).serialize(),\n S.menuItem()\n .title(`Toggle Increments`)\n .icon(SortIcon)\n .action(`showIncrements`)\n .serialize(),\n ],\n })\n )\n .serialize()\n}\n"],"names":["ORDER_FIELD_NAME","initialRank","lastRankValue","lastRank","LexoRank","parse","min","nextRank","genNext","toString","orderRankField","config","type","Error","defineField","title","readOnly","hidden","name","initialValue","p","_ref","getClient","lastDocOrderRank","apiVersion","fetch","order","orderRankOrdering","by","field","direction","OrderableContext","React","createContext","Document","_ref2","doc","increment","entities","index","isFirst","isLast","dragBadge","_a","_b","showIncrements","useContext","schema","useSchema","router","usePaneRouter","ChildLink","groupIndex","routerPanesState","currentDoc","id","pressed","_id","replace","selected","length","Link","useMemo","LinkComponent","linkProps","childId","jsx","PreviewCard","__unstable_focusRing","as","radius","sizing","tabIndex","tone","width","flex","children","jsxs","Flex","align","Box","paddingX","style","flexShrink","Text","size","DragHandleIcon","cursor","gap","paddingRight","Button","padding","mode","onClick","disabled","icon","ChevronUpIcon","ChevronDownIcon","Preview","layout","value","schemaType","get","_type","Card","marginRight","AvatarCounter","count","lexicographicalSort","a","b","reorderDocuments","_ref3","selectedIds","source","destination","startIndex","endIndex","isMovingUp","selectedItems","filter","item","includes","message","concat","join","all","reduce","acc","cur","curIndex","_c","_d","prevIndex","prevRank","curRank","nextIndex","max","betweenRank","between","selectedIndex","patches","flatMap","docPatches","set","startsWith","hasPublished","push","allSorted","sort","newOrder","useSanityClient","useClient","getItemStyle","draggableStyle","itemIsUpdating","userSelect","transition","opacity","pointerEvents","cardTone","settings","isDuplicate","isGhosting","isDragging","isSelected","DraggableList","_ref4","data","listIsUpdating","setListIsUpdating","toast","useToast","orderedData","setOrderedData","useState","useEffect","draggingId","setDraggingId","setSelectedIds","clearSelected","useCallback","handleSelect","clickedId","nativeEvent","selectMultiple","shiftKey","isUsingWindows","navigator","appVersion","indexOf","selectAdditional","ctrlKey","metaKey","updatedIds","preventDefault","lastSelectedId","lastSelectedIndex","findIndex","firstSelected","lastSelected","betweenIds","itemIndex","map","client","transactPatches","transaction","forEach","_ref5","docId","ops","patch","commit","then","updated","results","status","description","catch","handleDragEnd","result","draggableId","effectedIds","handleDragStart","start","incrementIndex","shiftFrom","shiftTo","onWindowKeyDown","event","key","window","addEventListener","removeEventListener","duplicateOrders","orderField","onDragEnd","DragDropContext","onDragStart","Droppable","droppableId","provided","droppableProps","ref","innerRef","Draggable","innerProvided","innerSnapshot","Boolean","isUpdating","isDisabled","selectedCount","draggableProps","dragHandleProps","paddingBottom","shadow","e","placeholder","DEFAULT_PARAMS","DocumentListQuery","_ref6","params","setData","query","queryParams","queryData","loading","error","useListeningQuery","filteredDocuments","alsoHasDraft","some","unorderedDataCount","height","justify","Spinner","Feedback","Container","paddingY","muted","Stack","space","overflow","marginBottom","Fragment","DocumentListWrapper","_ref7","resetOrderTransaction","schemaIsInvalid","typeSchema","fields","Provider","resetOrder","arguments","undefined","documents","aLexoRank","update","err","OrderableDocumentList","Component","constructor","props","__publicField","setState","state","closable","options","reorderWasSuccessful","render","_e","_f","orderableDocumentListDeskItem","context","S","listTitle","listId","listIcon","SortIcon","typeTitle","listItem","child","Object","assign","documentTypeList","serialize","__preserveInstance","component","menuItems","menuItem","intent","GenerateIcon","action"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/helpers/constants.ts","../src/helpers/initialRank.ts","../src/fields/orderRankField.ts","../src/fields/orderRankOrdering.ts","../src/OrderableContext.ts","../src/Document.tsx","../src/helpers/reorderDocuments.ts","../src/helpers/client.ts","../src/DraggableList.tsx","../src/DocumentListQuery.tsx","../src/DocumentListWrapper.tsx","../src/helpers/resetOrder.ts","../src/OrderableDocumentList.tsx","../src/desk-structure/orderableDocumentListDeskItem.ts"],"sourcesContent":["export const ORDER_FIELD_NAME = `orderRank` as const\n","import {LexoRank} from 'lexorank'\n\n// Use in initial value field by passing in the rank value of the last document\n// If not value passed, generate a sensibly low rank\nexport default function initialRank(lastRankValue = ``): string {\n const lastRank = lastRankValue ? LexoRank.parse(lastRankValue) : LexoRank.min()\n const nextRank = lastRank.genNext().genNext()\n\n return nextRank.toString()\n}\n","import {type ConfigContext, defineField} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\nimport initialRank from '../helpers/initialRank'\n\nexport type SchemaContext = Omit<ConfigContext, 'schema' | 'currentUser' | 'client'>\n\nexport interface RankFieldConfig {\n type: string\n}\n\nexport const orderRankField = (config: RankFieldConfig) => {\n if (!config?.type) {\n throw new Error(\n `\n type must be provided.\n Example: orderRankField({type: 'category'})\n `\n )\n }\n\n const {type} = config\n return defineField({\n title: 'Order Rank',\n readOnly: true,\n hidden: true,\n ...config,\n name: ORDER_FIELD_NAME,\n type: 'string',\n initialValue: async (p, {getClient}) => {\n const lastDocOrderRank = await getClient({apiVersion: '2021-09-01'}).fetch(\n `*[_type == $type]|order(@[$order] desc)[0][$order]`,\n {type, order: ORDER_FIELD_NAME}\n )\n return initialRank(lastDocOrderRank)\n },\n })\n}\n","import {SortOrdering} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\n\nexport const orderRankOrdering: SortOrdering = {\n title: 'Ordered',\n name: 'ordered',\n by: [{field: ORDER_FIELD_NAME, direction: 'asc'}],\n}\n","import React from 'react'\n\nexport interface OrderableContextValue {\n showIncrements?: boolean\n}\n\nexport const OrderableContext = React.createContext<OrderableContextValue>({})\n","import {useContext, useMemo, type ReactNode} from 'react'\nimport {ChevronDownIcon, ChevronUpIcon, DragHandleIcon} from '@sanity/icons'\nimport {AvatarCounter, Card, Box, Button, Flex, Text} from '@sanity/ui'\nimport {useSchema, SchemaType, PreviewCard, Preview} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport {OrderableContext} from './OrderableContext'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentProps {\n doc: SanityDocumentWithOrder\n entities: SanityDocumentWithOrder[]\n increment: (\n index: number,\n nextIndex: number,\n docId: string,\n entities: SanityDocumentWithOrder[]\n ) => void\n index: number\n isFirst: boolean\n isLast: boolean\n dragBadge: number | false\n}\n\nexport default function Document({\n doc,\n increment,\n entities,\n index,\n isFirst,\n isLast,\n dragBadge,\n}: DocumentProps) {\n const {showIncrements} = useContext(OrderableContext)\n const schema = useSchema()\n const router = usePaneRouter()\n const {ChildLink, groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n const pressed = currentDoc === doc._id || currentDoc === doc._id.replace(`drafts.`, ``)\n const selected = pressed && routerPanesState.length === groupIndex + 2\n\n const Link = useMemo(\n () =>\n function LinkComponent(linkProps: {children: ReactNode}) {\n return <ChildLink {...linkProps} childId={doc._id} />\n },\n [ChildLink, doc._id]\n )\n\n return (\n <PreviewCard\n __unstable_focusRing\n // @ts-expect-error\n as={Link}\n data-as=\"a\"\n data-ui=\"PaneItem\"\n radius={2}\n pressed={pressed}\n selected={selected}\n sizing=\"border\"\n tabIndex={-1}\n tone=\"inherit\"\n width=\"100%\"\n flex={1}\n >\n <Flex align=\"center\">\n <Box paddingX={2} style={{flexShrink: 0}}>\n <Text size={2}>\n <DragHandleIcon cursor=\"grab\" />\n </Text>\n </Box>\n {showIncrements && (\n <Flex style={{flexShrink: 0}} align=\"center\" gap={1} paddingRight={1}>\n <Button\n padding={2}\n mode=\"ghost\"\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + -1, doc._id, entities)}\n disabled={isFirst}\n icon={ChevronUpIcon}\n />\n <Button\n padding={2}\n mode=\"ghost\"\n disabled={isLast}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + 1, doc._id, entities)}\n icon={ChevronDownIcon}\n />\n </Flex>\n )}\n <Box style={{width: `100%`}}>\n <Flex flex={1} align=\"center\">\n <Preview\n layout=\"default\"\n value={doc}\n schemaType={schema.get(doc._type) as SchemaType}\n />\n </Flex>\n </Box>\n {dragBadge && (\n <Card tone=\"default\" marginRight={4} radius={5}>\n <AvatarCounter count={dragBadge} />\n </Card>\n )}\n </Flex>\n </PreviewCard>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport type {PatchOperations} from 'sanity'\n\nimport {SanityDocumentWithOrder} from '../types'\nimport {ORDER_FIELD_NAME} from './constants'\n\nexport interface MaifestArgs {\n entities: SanityDocumentWithOrder[]\n selectedItems: SanityDocumentWithOrder[]\n isMovingUp: boolean\n curIndex: number\n nextIndex: number\n prevIndex: number\n}\n\nexport interface ReorderArgs {\n entities: SanityDocumentWithOrder[]\n selectedIds: string[]\n source: any\n destination: any\n}\n\nexport interface ReorderReturn {\n newOrder: SanityDocumentWithOrder[]\n patches: [string, PatchOperations][]\n message: any\n}\n\nfunction lexicographicalSort(a: SanityDocumentWithOrder, b: SanityDocumentWithOrder) {\n if (!a[ORDER_FIELD_NAME] || !b[ORDER_FIELD_NAME]) {\n return 0\n } else if (a[ORDER_FIELD_NAME] < b[ORDER_FIELD_NAME]) {\n return -1\n } else if (a[ORDER_FIELD_NAME] > b[ORDER_FIELD_NAME]) {\n return 1\n }\n return 0\n}\n\nexport const reorderDocuments = ({\n entities,\n selectedIds,\n source,\n destination,\n}: ReorderArgs): ReorderReturn => {\n const startIndex = source.index\n const endIndex = destination.index\n const isMovingUp = startIndex > endIndex\n const selectedItems = entities.filter((item) => selectedIds.includes(item._id))\n const message = [\n `Moved`,\n selectedItems.length === 1 ? `1 document` : `${selectedItems.length} documents`,\n isMovingUp ? `up` : `down`,\n `from position`,\n `${startIndex + 1} to ${endIndex + 1}`,\n ].join(' ')\n\n const {all, selected} = entities.reduce<{\n all: SanityDocumentWithOrder[]\n selected: SanityDocumentWithOrder[]\n }>(\n (acc, cur, curIndex) => {\n // Selected items get spread in below, so skip them here\n if (selectedIds.includes(cur._id)) {\n return {all: acc.all, selected: acc.selected}\n }\n\n // Drop selected items in\n if (curIndex === endIndex) {\n const prevIndex = curIndex - 1\n const prevRank = entities[prevIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[prevIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.min()\n\n const curRank = LexoRank.parse(entities[curIndex][ORDER_FIELD_NAME] as string)\n\n const nextIndex = curIndex + 1\n const nextRank = entities[nextIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[nextIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.max()\n\n let betweenRank = isMovingUp ? prevRank.between(curRank) : curRank.between(nextRank)\n\n // For each selected item, assign a new orderRank between now and next\n for (let selectedIndex = 0; selectedIndex < selectedItems.length; selectedIndex += 1) {\n selectedItems[selectedIndex][ORDER_FIELD_NAME] = betweenRank.toString()\n betweenRank = isMovingUp ? betweenRank.between(curRank) : betweenRank.between(nextRank)\n }\n\n return {\n // The `all` array gets sorted by order field later anyway\n // so that this probably isn't necessary ¯\\_(ツ)_/¯\n all: isMovingUp\n ? [...acc.all, ...selectedItems, cur]\n : [...acc.all, cur, ...selectedItems],\n selected: selectedItems,\n }\n }\n\n return {all: [...acc.all, cur], selected: acc.selected}\n },\n {all: [], selected: []}\n )\n\n const patches = selected.flatMap((doc) => {\n const docPatches: [string, PatchOperations][] = [\n [\n doc._id,\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ],\n ]\n\n // If it's a draft, we need to patch the published document as well\n if (doc._id.startsWith(`drafts.`) && doc.hasPublished) {\n docPatches.push([\n doc._id.replace(`drafts.`, ``),\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ])\n }\n\n return docPatches\n })\n\n // Safety-check to make sure everything is in order\n const allSorted = all.sort(lexicographicalSort)\n\n return {newOrder: allSorted, patches, message}\n}\n","import {useClient} from 'sanity'\n\nexport function useSanityClient() {\n return useClient({apiVersion: '2021-09-01'})\n}\n","import {useEffect, useState, useMemo, useCallback, CSSProperties} from 'react'\nimport {DragDropContext, Draggable, Droppable, type DropResult} from '@hello-pangea/dnd'\nimport {Box, Card, useToast} from '@sanity/ui'\nimport type {PatchOperations} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport Document from './Document'\nimport {reorderDocuments} from './helpers/reorderDocuments'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {useSanityClient} from './helpers/client'\nimport {SanityDocumentWithOrder} from './types'\n\ninterface ListSetting {\n isDuplicate: boolean\n isGhosting: boolean\n isDragging: boolean\n isSelected: boolean\n}\n\nexport interface DraggableListProps {\n data: SanityDocumentWithOrder[]\n listIsUpdating: boolean\n setListIsUpdating: (val: boolean) => void\n}\n\nconst getItemStyle = (\n draggableStyle: CSSProperties | undefined,\n itemIsUpdating: boolean\n): CSSProperties => ({\n userSelect: 'none',\n transition: `opacity 500ms ease-in-out`,\n opacity: itemIsUpdating ? 0.2 : 1,\n pointerEvents: itemIsUpdating ? `none` : undefined,\n ...draggableStyle,\n})\n\nconst cardTone = (settings: ListSetting) => {\n const {isDuplicate, isGhosting, isDragging, isSelected} = settings\n\n if (isGhosting) return `transparent`\n if (isDragging || isSelected) return `primary`\n if (isDuplicate) return `caution`\n\n return undefined\n}\n\nexport default function DraggableList({\n data,\n listIsUpdating,\n setListIsUpdating,\n}: DraggableListProps) {\n const toast = useToast()\n const router = usePaneRouter()\n const {groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n\n // Maintains local state order before transaction completes\n const [orderedData, setOrderedData] = useState<SanityDocumentWithOrder[]>(data)\n\n // Update local state when documents change from an outside source\n useEffect(() => {\n if (!listIsUpdating) setOrderedData(data)\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [data])\n\n const [draggingId, setDraggingId] = useState(``)\n const [selectedIds, setSelectedIds] = useState<string[]>(currentDoc ? [currentDoc] : [])\n\n const clearSelected = useCallback(() => setSelectedIds([]), [setSelectedIds])\n\n const handleSelect = useCallback(\n (clickedId: string, index: number, nativeEvent: MouseEvent) => {\n const isSelected = selectedIds.includes(clickedId)\n const selectMultiple = nativeEvent.shiftKey\n const isUsingWindows = navigator.appVersion.indexOf('Win') !== -1\n const selectAdditional = isUsingWindows ? nativeEvent.ctrlKey : nativeEvent.metaKey\n\n let updatedIds = []\n\n // No modifier keys pressed during click:\n // - update selected to just this one\n // - open document\n if (!selectMultiple && !selectAdditional) {\n return setSelectedIds([clickedId])\n }\n\n // If shift key was held, prevent default to avoid new window opening\n if (selectMultiple) {\n nativeEvent.preventDefault()\n }\n\n // Shift key was held, add id's between last selected and this one\n // ...before adding this one\n if (selectMultiple && !isSelected) {\n const lastSelectedId = selectedIds[selectedIds.length - 1]\n const lastSelectedIndex = orderedData.findIndex((item) => item._id === lastSelectedId)\n\n const firstSelected = index < lastSelectedIndex ? index : lastSelectedIndex\n const lastSelected = index > lastSelectedIndex ? index : lastSelectedIndex\n\n const betweenIds = orderedData\n .filter((item, itemIndex) => itemIndex > firstSelected && itemIndex < lastSelected)\n .map((item) => item._id)\n\n updatedIds = [...selectedIds, ...betweenIds, clickedId]\n } else if (isSelected) {\n // Toggle off a single id\n updatedIds = selectedIds.filter((id) => id !== clickedId)\n } else {\n // Toggle on a single id\n updatedIds = [...selectedIds, clickedId]\n }\n\n return setSelectedIds(updatedIds)\n },\n [setSelectedIds, orderedData, selectedIds]\n )\n\n const client = useSanityClient()\n\n const transactPatches = useCallback(\n async (patches: [string, PatchOperations][], message: string) => {\n const transaction = client.transaction()\n\n patches.forEach(([docId, ops]) => transaction.patch(docId, ops))\n\n await transaction\n .commit()\n .then((updated) => {\n clearSelected()\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `${\n updated.results.length === 1 ? `1 Document` : `${updated.results.length} Documents`\n } Reordered`,\n status: `success`,\n description: message,\n })\n })\n .catch(() => {\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `Reordering failed`,\n status: `error`,\n })\n })\n },\n [client, setDraggingId, clearSelected, setListIsUpdating, toast]\n )\n\n const handleDragEnd = useCallback(\n (result: DropResult | undefined, entities: SanityDocumentWithOrder[]) => {\n setDraggingId(``)\n\n const {source, destination, draggableId} = result ?? {}\n\n // Don't do anything if nothing changed\n if (source?.index === destination?.index) return\n\n // Don't do anything if we don't have the entitites\n if (!entities?.length || !draggableId) return\n\n // A document can be dragged without being one-of-many-selected\n const effectedIds = selectedIds?.length ? selectedIds : [draggableId]\n\n // Don't do anything if we don't have ids to effect\n if (!effectedIds?.length) return\n\n // Update state to update styles + prevent data refetching\n setListIsUpdating(true)\n setSelectedIds(effectedIds)\n\n const {newOrder, patches, message} = reorderDocuments({\n entities,\n selectedIds: effectedIds,\n source,\n destination,\n })\n\n // Update local state\n if (newOrder?.length) {\n setOrderedData(newOrder)\n }\n\n // Transact new order patches\n if (patches?.length) {\n transactPatches(patches, message)\n }\n },\n [selectedIds, setDraggingId, setSelectedIds, transactPatches, setListIsUpdating]\n )\n\n const handleDragStart = useCallback(\n (start: {draggableId: string}) => {\n const id = start.draggableId\n const selected = selectedIds.includes(id)\n\n // if dragging an item that is not selected - unselect all items\n if (!selected) clearSelected()\n\n setDraggingId(id)\n },\n [selectedIds, clearSelected, setDraggingId]\n )\n\n // Move one document up or down one place, by fake invoking the drag function\n const incrementIndex = useCallback(\n (shiftFrom: number, shiftTo: number, id: string, entities: SanityDocumentWithOrder[]) => {\n const result = {\n draggableId: id,\n source: {index: shiftFrom},\n destination: {index: shiftTo},\n }\n\n return handleDragEnd(result as DropResult, entities)\n },\n [handleDragEnd]\n )\n\n const onWindowKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n clearSelected()\n }\n },\n [clearSelected]\n )\n\n useEffect(() => {\n window.addEventListener('keydown', onWindowKeyDown)\n\n return () => {\n window.removeEventListener('keydown', onWindowKeyDown)\n }\n }, [onWindowKeyDown])\n\n // Find all items with duplicate order field\n const duplicateOrders = useMemo(() => {\n if (!orderedData.length) return []\n\n const orderField = orderedData.map((item) => item[ORDER_FIELD_NAME])\n\n return orderField.filter((item, index) => orderField.indexOf(item) !== index)\n }, [orderedData])\n\n const onDragEnd = useCallback(\n (result: DropResult) => handleDragEnd(result, orderedData),\n [orderedData, handleDragEnd]\n )\n\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={onDragEnd}>\n <Droppable droppableId=\"documentSortZone\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {orderedData.map((item, index) => (\n <Draggable\n key={`${item._id}-${item[ORDER_FIELD_NAME]}`}\n draggableId={item._id}\n index={index}\n // onClick={(event) => handleDraggableClick(event, provided, snapshot)}\n >\n {(innerProvided, innerSnapshot) => {\n const isSelected = selectedIds.includes(item._id)\n const isDragging = innerSnapshot.isDragging\n const isGhosting = Boolean(!isDragging && draggingId && isSelected)\n const isUpdating = listIsUpdating && isSelected\n const isDisabled = Boolean(!item[ORDER_FIELD_NAME])\n const isDuplicate = duplicateOrders.includes(item[ORDER_FIELD_NAME])\n const tone = cardTone({isDuplicate, isGhosting, isDragging, isSelected})\n const selectedCount = selectedIds.length\n\n const dragBadge = isDragging && selectedCount > 1 ? selectedCount : false\n\n return (\n <div\n ref={innerProvided.innerRef}\n {...innerProvided.draggableProps}\n {...innerProvided.dragHandleProps}\n style={\n isDisabled\n ? {opacity: 0.2, pointerEvents: `none`}\n : getItemStyle(innerProvided.draggableProps.style, isUpdating)\n }\n >\n <Box paddingBottom={1}>\n <Card\n tone={tone}\n shadow={isDragging ? 2 : undefined}\n radius={2}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={(e) => handleSelect(item._id, index, e.nativeEvent)}\n >\n <Document\n doc={item}\n entities={orderedData}\n increment={incrementIndex}\n index={index}\n isFirst={index === 0}\n isLast={index === orderedData.length - 1}\n dragBadge={dragBadge}\n />\n </Card>\n </Box>\n </div>\n )\n }}\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n )\n}\n","import {useEffect, useMemo, useState} from 'react'\nimport {Box, Flex, Container, Spinner, Stack, Text} from '@sanity/ui'\n\nimport {useListeningQuery, Feedback} from 'sanity-plugin-utils'\nimport DraggableList from './DraggableList'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentListQueryProps {\n type: string\n filter?: string\n params?: Record<string, unknown>\n}\n\nconst DEFAULT_PARAMS = {}\n\nexport default function DocumentListQuery({\n type,\n filter,\n params = DEFAULT_PARAMS,\n}: DocumentListQueryProps) {\n const [listIsUpdating, setListIsUpdating] = useState(false)\n const [data, setData] = useState<SanityDocumentWithOrder[] | null>([])\n\n const query = `*[_type == $type ${filter ? `&& ${filter}` : ''}]|order(@[$order] asc){\n _id, _type, ${ORDER_FIELD_NAME}\n }`\n const queryParams = {\n ...params,\n type,\n order: ORDER_FIELD_NAME,\n }\n\n const {\n data: queryData,\n loading,\n error,\n } = useListeningQuery<SanityDocumentWithOrder[]>(query, {\n params: queryParams,\n initialValue: [],\n })\n\n useEffect(() => {\n if (queryData) {\n const filteredDocuments = queryData.reduce<SanityDocumentWithOrder[]>((acc, cur) => {\n if (!cur._id.startsWith(`drafts.`)) {\n // eslint-disable-next-line max-nested-callbacks\n const alsoHasDraft = queryData.some((doc) => doc._id === `drafts.${cur._id}`)\n return alsoHasDraft ? acc : [...acc, cur]\n }\n\n // Check if the draft has a published version\n cur.hasPublished = queryData.some((doc) => doc._id === cur._id.replace(`drafts.`, ``))\n\n return [...acc, cur]\n }, [])\n\n setData(filteredDocuments)\n } else {\n setData([])\n }\n }, [queryData])\n\n const unorderedDataCount = useMemo(\n () => (data?.length ? data.filter((doc) => !doc[ORDER_FIELD_NAME]).length : 0),\n [data]\n )\n\n if (loading) {\n return (\n <Flex style={{width: `100%`, height: `100%`}} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n if (error) {\n return (\n <Box padding={2}>\n <Feedback tone=\"critical\" title=\"There was an error\" description=\"Please try again later\" />\n </Box>\n )\n }\n\n if (!data || data?.length == 0)\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n No documents of this type\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n\n return (\n <Stack space={1} style={{overflow: `auto`, height: `100%`}}>\n <Box padding={2}>\n {unorderedDataCount > 0 && (\n <Box marginBottom={2}>\n <Feedback\n tone=\"caution\"\n description={\n <>\n {unorderedDataCount}/{data?.length} documents have no order. Select{' '}\n <strong>Reset Order</strong> from the menu above to fix.\n </>\n }\n />\n </Box>\n )}\n <DraggableList\n data={data}\n listIsUpdating={listIsUpdating}\n setListIsUpdating={setListIsUpdating}\n />\n </Box>\n </Stack>\n )\n}\n","import {useEffect, useMemo} from 'react'\nimport {useToast} from '@sanity/ui'\n\nimport {useSchema} from 'sanity'\nimport {Box, type ToastParams} from '@sanity/ui'\nimport {Feedback} from 'sanity-plugin-utils'\nimport DocumentListQuery from './DocumentListQuery'\nimport {OrderableContext} from './OrderableContext'\n\nimport {ORDER_FIELD_NAME} from './helpers/constants'\n\nexport interface DocumentListWrapperProps {\n showIncrements: boolean\n type: string\n resetOrderTransaction: ToastParams\n // eslint-disable-next-line react/require-default-props\n filter?: string\n // eslint-disable-next-line react/require-default-props\n params?: Record<string, unknown>\n}\n\n// 1. Validate first that the schema has been configured for ordering\n// 2. Setup context for showIncrements\nexport default function DocumentListWrapper({\n type,\n showIncrements,\n resetOrderTransaction,\n filter,\n params,\n}: DocumentListWrapperProps) {\n const toast = useToast()\n const schema = useSchema()\n\n useEffect(() => {\n if (resetOrderTransaction?.title && resetOrderTransaction?.status) {\n toast.push(resetOrderTransaction)\n }\n }, [resetOrderTransaction, toast])\n\n const schemaIsInvalid = useMemo(() => {\n // Option not passed\n if (!type) {\n return (\n <>\n No <code>type</code> was configured\n </>\n )\n }\n\n const typeSchema = schema.get(type)\n\n // Schema not found\n if (!typeSchema) {\n return (\n <>\n Schema <code>{type}</code> not found\n </>\n )\n }\n\n // Schema lacks an order field\n if (\n !('fields' in typeSchema) ||\n !typeSchema.fields.some((field) => field?.name === ORDER_FIELD_NAME)\n ) {\n return (\n <>\n Schema <code>{type}</code> must have an <code>{ORDER_FIELD_NAME}</code> field of type{' '}\n <code>string</code>\n </>\n )\n }\n\n // Schema's order field is not a string\n if (\n 'fields' in typeSchema &&\n typeSchema.fields.some(\n (field) => field?.name === ORDER_FIELD_NAME && field?.type?.name !== 'string'\n )\n ) {\n return (\n <>\n <code>{ORDER_FIELD_NAME}</code> field on Schema <code>{type}</code> must be{' '}\n <code>string</code> type\n </>\n )\n }\n\n return ''\n }, [type, schema])\n\n if (schemaIsInvalid) {\n return (\n <Box padding={2}>\n <Feedback description={schemaIsInvalid} tone=\"caution\" />\n </Box>\n )\n }\n\n return (\n <OrderableContext.Provider value={{showIncrements}}>\n <DocumentListQuery type={type} filter={filter} params={params} />\n </OrderableContext.Provider>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport {SanityClient} from '@sanity/client'\nimport {ORDER_FIELD_NAME} from './constants'\n// Function to wipe and re-do ordering with LexoRank\n// Will at least attempt to start with the current order\nexport async function resetOrder(type = ``, client: SanityClient) {\n const query = `*[_type == $type]|order(@[$order] asc)._id`\n const queryParams = {type, order: ORDER_FIELD_NAME}\n const documents = await client.fetch(query, queryParams)\n\n if (!documents.length) {\n return null\n }\n\n const transaction = client.transaction()\n let aLexoRank = LexoRank.min()\n\n for (let index = 0; index < documents.length; index += 1) {\n // Generate next rank before even the first document so there's room to move!\n aLexoRank = aLexoRank.genNext().genNext()\n\n transaction.patch(documents[index], {\n set: {[ORDER_FIELD_NAME]: aLexoRank.toString()},\n })\n }\n\n return transaction\n .commit()\n .then((update) => update)\n .catch((err) => err)\n}\n","import {Component} from 'react'\n\nimport {SanityClient} from '@sanity/client'\nimport type {ToastParams} from '@sanity/ui'\nimport DocumentListWrapper from './DocumentListWrapper'\nimport {resetOrder} from './helpers/resetOrder'\n\nexport interface OrderableDocumentListProps {\n options: {\n type: string\n client: SanityClient\n filter?: string\n params?: Record<string, unknown>\n }\n}\n\ninterface State {\n showIncrements: boolean\n resetOrderTransaction: ToastParams\n}\n\n// Must use a Class Component here so the actionHandlers can be called\nexport default class OrderableDocumentList extends Component<OrderableDocumentListProps, State> {\n constructor(props: OrderableDocumentListProps) {\n super(props)\n this.state = {\n showIncrements: false,\n resetOrderTransaction: {},\n }\n }\n\n actionHandlers = {\n showIncrements: () => {\n this.setState((state) => ({\n showIncrements: !state.showIncrements,\n }))\n },\n\n resetOrder: async () => {\n this.setState(() => ({\n resetOrderTransaction: {\n status: `info`,\n title: `Reordering started...`,\n closable: true,\n },\n }))\n\n const update = await resetOrder(this.props.options.type, this.props.options.client)\n\n const reorderWasSuccessful = update?.results?.length\n\n this.setState(() => ({\n resetOrderTransaction: {\n status: reorderWasSuccessful ? `success` : `info`,\n title: reorderWasSuccessful\n ? `Reordered ${update.results.length === 1 ? `Document` : `Documents`}`\n : `Reordering failed`,\n closable: true,\n },\n }))\n },\n }\n\n render() {\n const type = this?.props?.options?.type\n if (!type) {\n return null\n }\n return (\n <DocumentListWrapper\n filter={this?.props?.options?.filter}\n params={this?.props?.options?.params}\n type={type}\n showIncrements={this.state.showIncrements}\n resetOrderTransaction={this.state.resetOrderTransaction}\n />\n )\n }\n}\n","import {GenerateIcon, SortIcon} from '@sanity/icons'\nimport type {ConfigContext} from 'sanity'\n\nimport {ComponentType} from 'react'\nimport {StructureBuilder, type ListItem, type MenuItem} from 'sanity/desk'\nimport OrderableDocumentList from '../OrderableDocumentList'\n\nexport interface OrderableListConfig {\n type: string\n id?: string\n title?: string\n icon?: ComponentType\n params?: Record<string, unknown>\n filter?: string\n menuItems?: MenuItem[]\n createIntent?: boolean\n context: ConfigContext\n S: StructureBuilder\n}\n\nexport function orderableDocumentListDeskItem(config: OrderableListConfig): ListItem {\n if (!config?.type || !config.context || !config.S) {\n throw new Error(`\n type, context and S (StructureBuilder) must be provided.\n context and S are available when configuring structure.\n Example: orderableDocumentListDeskItem({type: 'category'})\n `)\n }\n\n const {type, filter, menuItems = [], createIntent, params, title, icon, id, context, S} = config\n const {schema, getClient} = context\n const client = getClient({apiVersion: '2021-09-01'})\n\n const listTitle = title ?? `Orderable ${type}`\n const listId = id ?? `orderable-${type}`\n const listIcon = icon ?? SortIcon\n const typeTitle = schema.get(type)?.title ?? type\n\n if (createIntent !== false) {\n menuItems.push(\n S.menuItem()\n .title(`Create new ${typeTitle}`)\n .intent({type: 'create', params: {type}})\n .serialize()\n )\n }\n return S.listItem()\n .title(listTitle)\n .id(listId)\n .icon(listIcon)\n .child(\n Object.assign(S.documentTypeList(type).serialize(), {\n // Prevents the component from re-rendering when switching documents\n __preserveInstance: true,\n // Prevents the component from NOT re-rendering when switching listItems\n key: listId,\n\n type: 'component',\n component: OrderableDocumentList,\n options: {type, filter, params, client},\n menuItems: [\n ...menuItems,\n S.menuItem().title(`Reset Order`).icon(GenerateIcon).action(`resetOrder`).serialize(),\n S.menuItem()\n .title(`Toggle Increments`)\n .icon(SortIcon)\n .action(`showIncrements`)\n .serialize(),\n ],\n })\n )\n .serialize()\n}\n"],"names":["ORDER_FIELD_NAME","initialRank","lastRankValue","lastRank","LexoRank","parse","min","nextRank","genNext","toString","orderRankField","config","type","Error","defineField","title","readOnly","hidden","name","initialValue","p","_ref","getClient","lastDocOrderRank","apiVersion","fetch","order","orderRankOrdering","by","field","direction","OrderableContext","React","createContext","Document","_ref2","doc","increment","entities","index","isFirst","isLast","dragBadge","_a","_b","showIncrements","useContext","schema","useSchema","router","usePaneRouter","ChildLink","groupIndex","routerPanesState","currentDoc","id","pressed","_id","replace","selected","length","Link","useMemo","LinkComponent","linkProps","childId","jsx","PreviewCard","__unstable_focusRing","as","radius","sizing","tabIndex","tone","width","flex","children","jsxs","Flex","align","Box","paddingX","style","flexShrink","Text","size","DragHandleIcon","cursor","gap","paddingRight","Button","padding","mode","onClick","disabled","icon","ChevronUpIcon","ChevronDownIcon","Preview","layout","value","schemaType","get","_type","Card","marginRight","AvatarCounter","count","lexicographicalSort","a","b","reorderDocuments","_ref3","selectedIds","source","destination","startIndex","endIndex","isMovingUp","selectedItems","filter","item","includes","message","concat","join","all","reduce","acc","cur","curIndex","_c","_d","prevIndex","prevRank","curRank","nextIndex","max","betweenRank","between","selectedIndex","patches","flatMap","docPatches","set","startsWith","hasPublished","push","allSorted","sort","newOrder","useSanityClient","useClient","getItemStyle","draggableStyle","itemIsUpdating","userSelect","transition","opacity","pointerEvents","cardTone","settings","isDuplicate","isGhosting","isDragging","isSelected","DraggableList","_ref4","data","listIsUpdating","setListIsUpdating","toast","useToast","orderedData","setOrderedData","useState","useEffect","draggingId","setDraggingId","setSelectedIds","clearSelected","useCallback","handleSelect","clickedId","nativeEvent","selectMultiple","shiftKey","isUsingWindows","navigator","appVersion","indexOf","selectAdditional","ctrlKey","metaKey","updatedIds","preventDefault","lastSelectedId","lastSelectedIndex","findIndex","firstSelected","lastSelected","betweenIds","itemIndex","map","client","transactPatches","transaction","forEach","_ref5","docId","ops","patch","commit","then","updated","results","status","description","catch","handleDragEnd","result","draggableId","effectedIds","handleDragStart","start","incrementIndex","shiftFrom","shiftTo","onWindowKeyDown","event","key","window","addEventListener","removeEventListener","duplicateOrders","orderField","onDragEnd","DragDropContext","onDragStart","Droppable","droppableId","provided","droppableProps","ref","innerRef","Draggable","innerProvided","innerSnapshot","Boolean","isUpdating","isDisabled","selectedCount","draggableProps","dragHandleProps","paddingBottom","shadow","e","placeholder","DEFAULT_PARAMS","DocumentListQuery","_ref6","params","setData","query","queryParams","queryData","loading","error","useListeningQuery","filteredDocuments","alsoHasDraft","some","unorderedDataCount","height","justify","Spinner","Feedback","Container","paddingY","muted","Stack","space","overflow","marginBottom","Fragment","DocumentListWrapper","_ref7","resetOrderTransaction","schemaIsInvalid","typeSchema","fields","Provider","resetOrder","arguments","undefined","documents","aLexoRank","update","err","OrderableDocumentList","Component","constructor","props","__publicField","setState","state","closable","options","reorderWasSuccessful","render","_e","_f","orderableDocumentListDeskItem","context","S","menuItems","createIntent","listTitle","listId","listIcon","SortIcon","typeTitle","menuItem","intent","serialize","listItem","child","Object","assign","documentTypeList","__preserveInstance","component","GenerateIcon","action"],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -108,7 +108,7 @@ function Document(_ref2) {
|
|
|
108
108
|
children: /* @__PURE__ */jsxRuntime.jsxs(ui.Flex, {
|
|
109
109
|
align: "center",
|
|
110
110
|
children: [/* @__PURE__ */jsxRuntime.jsx(ui.Box, {
|
|
111
|
-
paddingX:
|
|
111
|
+
paddingX: 2,
|
|
112
112
|
style: {
|
|
113
113
|
flexShrink: 0
|
|
114
114
|
},
|
|
@@ -142,7 +142,6 @@ function Document(_ref2) {
|
|
|
142
142
|
style: {
|
|
143
143
|
width: "100%"
|
|
144
144
|
},
|
|
145
|
-
padding: 2,
|
|
146
145
|
children: /* @__PURE__ */jsxRuntime.jsx(ui.Flex, {
|
|
147
146
|
flex: 1,
|
|
148
147
|
align: "center",
|
|
@@ -738,6 +737,8 @@ function orderableDocumentListDeskItem(config) {
|
|
|
738
737
|
const {
|
|
739
738
|
type,
|
|
740
739
|
filter,
|
|
740
|
+
menuItems = [],
|
|
741
|
+
createIntent,
|
|
741
742
|
params,
|
|
742
743
|
title,
|
|
743
744
|
icon,
|
|
@@ -756,6 +757,14 @@ function orderableDocumentListDeskItem(config) {
|
|
|
756
757
|
const listId = id != null ? id : "orderable-".concat(type);
|
|
757
758
|
const listIcon = icon != null ? icon : icons.SortIcon;
|
|
758
759
|
const typeTitle = (_b = (_a = schema.get(type)) == null ? void 0 : _a.title) != null ? _b : type;
|
|
760
|
+
if (createIntent !== false) {
|
|
761
|
+
menuItems.push(S.menuItem().title("Create new ".concat(typeTitle)).intent({
|
|
762
|
+
type: "create",
|
|
763
|
+
params: {
|
|
764
|
+
type
|
|
765
|
+
}
|
|
766
|
+
}).serialize());
|
|
767
|
+
}
|
|
759
768
|
return S.listItem().title(listTitle).id(listId).icon(listIcon).child(Object.assign(S.documentTypeList(type).serialize(), {
|
|
760
769
|
// Prevents the component from re-rendering when switching documents
|
|
761
770
|
__preserveInstance: true,
|
|
@@ -769,12 +778,7 @@ function orderableDocumentListDeskItem(config) {
|
|
|
769
778
|
params,
|
|
770
779
|
client
|
|
771
780
|
},
|
|
772
|
-
menuItems: [S.menuItem().title("
|
|
773
|
-
type: "create",
|
|
774
|
-
params: {
|
|
775
|
-
type
|
|
776
|
-
}
|
|
777
|
-
}).serialize(), S.menuItem().title("Reset Order").icon(icons.GenerateIcon).action("resetOrder").serialize(), S.menuItem().title("Toggle Increments").icon(icons.SortIcon).action("showIncrements").serialize()]
|
|
781
|
+
menuItems: [...menuItems, S.menuItem().title("Reset Order").icon(icons.GenerateIcon).action("resetOrder").serialize(), S.menuItem().title("Toggle Increments").icon(icons.SortIcon).action("showIncrements").serialize()]
|
|
778
782
|
})).serialize();
|
|
779
783
|
}
|
|
780
784
|
exports.orderRankField = orderRankField;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/helpers/constants.ts","../src/helpers/initialRank.ts","../src/fields/orderRankField.ts","../src/fields/orderRankOrdering.ts","../src/OrderableContext.ts","../src/Document.tsx","../src/helpers/reorderDocuments.ts","../src/helpers/client.ts","../src/DraggableList.tsx","../src/DocumentListQuery.tsx","../src/DocumentListWrapper.tsx","../src/helpers/resetOrder.ts","../src/OrderableDocumentList.tsx","../src/desk-structure/orderableDocumentListDeskItem.ts"],"sourcesContent":["export const ORDER_FIELD_NAME = `orderRank` as const\n","import {LexoRank} from 'lexorank'\n\n// Use in initial value field by passing in the rank value of the last document\n// If not value passed, generate a sensibly low rank\nexport default function initialRank(lastRankValue = ``): string {\n const lastRank = lastRankValue ? LexoRank.parse(lastRankValue) : LexoRank.min()\n const nextRank = lastRank.genNext().genNext()\n\n return nextRank.toString()\n}\n","import {type ConfigContext, defineField} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\nimport initialRank from '../helpers/initialRank'\n\nexport type SchemaContext = Omit<ConfigContext, 'schema' | 'currentUser' | 'client'>\n\nexport interface RankFieldConfig {\n type: string\n}\n\nexport const orderRankField = (config: RankFieldConfig) => {\n if (!config?.type) {\n throw new Error(\n `\n type must be provided.\n Example: orderRankField({type: 'category'})\n `\n )\n }\n\n const {type} = config\n return defineField({\n title: 'Order Rank',\n readOnly: true,\n hidden: true,\n ...config,\n name: ORDER_FIELD_NAME,\n type: 'string',\n initialValue: async (p, {getClient}) => {\n const lastDocOrderRank = await getClient({apiVersion: '2021-09-01'}).fetch(\n `*[_type == $type]|order(@[$order] desc)[0][$order]`,\n {type, order: ORDER_FIELD_NAME}\n )\n return initialRank(lastDocOrderRank)\n },\n })\n}\n","import {SortOrdering} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\n\nexport const orderRankOrdering: SortOrdering = {\n title: 'Ordered',\n name: 'ordered',\n by: [{field: ORDER_FIELD_NAME, direction: 'asc'}],\n}\n","import React from 'react'\n\nexport interface OrderableContextValue {\n showIncrements?: boolean\n}\n\nexport const OrderableContext = React.createContext<OrderableContextValue>({})\n","import {useContext, useMemo, type ReactNode} from 'react'\nimport {ChevronDownIcon, ChevronUpIcon, DragHandleIcon} from '@sanity/icons'\nimport {AvatarCounter, Card, Box, Button, Flex, Text} from '@sanity/ui'\nimport {useSchema, SchemaType, PreviewCard, Preview} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport {OrderableContext} from './OrderableContext'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentProps {\n doc: SanityDocumentWithOrder\n entities: SanityDocumentWithOrder[]\n increment: (\n index: number,\n nextIndex: number,\n docId: string,\n entities: SanityDocumentWithOrder[]\n ) => void\n index: number\n isFirst: boolean\n isLast: boolean\n dragBadge: number | false\n}\n\nexport default function Document({\n doc,\n increment,\n entities,\n index,\n isFirst,\n isLast,\n dragBadge,\n}: DocumentProps) {\n const {showIncrements} = useContext(OrderableContext)\n const schema = useSchema()\n const router = usePaneRouter()\n const {ChildLink, groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n const pressed = currentDoc === doc._id || currentDoc === doc._id.replace(`drafts.`, ``)\n const selected = pressed && routerPanesState.length === groupIndex + 2\n\n const Link = useMemo(\n () =>\n function LinkComponent(linkProps: {children: ReactNode}) {\n return <ChildLink {...linkProps} childId={doc._id} />\n },\n [ChildLink, doc._id]\n )\n\n return (\n <PreviewCard\n __unstable_focusRing\n // @ts-expect-error\n as={Link}\n data-as=\"a\"\n data-ui=\"PaneItem\"\n radius={2}\n pressed={pressed}\n selected={selected}\n sizing=\"border\"\n tabIndex={-1}\n tone=\"inherit\"\n width=\"100%\"\n flex={1}\n >\n <Flex align=\"center\">\n <Box paddingX={3} style={{flexShrink: 0}}>\n <Text size={2}>\n <DragHandleIcon cursor=\"grab\" />\n </Text>\n </Box>\n {showIncrements && (\n <Flex style={{flexShrink: 0}} align=\"center\" gap={1} paddingRight={1}>\n <Button\n padding={2}\n mode=\"ghost\"\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + -1, doc._id, entities)}\n disabled={isFirst}\n icon={ChevronUpIcon}\n />\n <Button\n padding={2}\n mode=\"ghost\"\n disabled={isLast}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + 1, doc._id, entities)}\n icon={ChevronDownIcon}\n />\n </Flex>\n )}\n <Box style={{width: `100%`}} padding={2}>\n <Flex flex={1} align=\"center\">\n <Preview\n layout=\"default\"\n value={doc}\n schemaType={schema.get(doc._type) as SchemaType}\n />\n </Flex>\n </Box>\n {dragBadge && (\n <Card tone=\"default\" marginRight={4} radius={5}>\n <AvatarCounter count={dragBadge} />\n </Card>\n )}\n </Flex>\n </PreviewCard>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport type {PatchOperations} from 'sanity'\n\nimport {SanityDocumentWithOrder} from '../types'\nimport {ORDER_FIELD_NAME} from './constants'\n\nexport interface MaifestArgs {\n entities: SanityDocumentWithOrder[]\n selectedItems: SanityDocumentWithOrder[]\n isMovingUp: boolean\n curIndex: number\n nextIndex: number\n prevIndex: number\n}\n\nexport interface ReorderArgs {\n entities: SanityDocumentWithOrder[]\n selectedIds: string[]\n source: any\n destination: any\n}\n\nexport interface ReorderReturn {\n newOrder: SanityDocumentWithOrder[]\n patches: [string, PatchOperations][]\n message: any\n}\n\nfunction lexicographicalSort(a: SanityDocumentWithOrder, b: SanityDocumentWithOrder) {\n if (!a[ORDER_FIELD_NAME] || !b[ORDER_FIELD_NAME]) {\n return 0\n } else if (a[ORDER_FIELD_NAME] < b[ORDER_FIELD_NAME]) {\n return -1\n } else if (a[ORDER_FIELD_NAME] > b[ORDER_FIELD_NAME]) {\n return 1\n }\n return 0\n}\n\nexport const reorderDocuments = ({\n entities,\n selectedIds,\n source,\n destination,\n}: ReorderArgs): ReorderReturn => {\n const startIndex = source.index\n const endIndex = destination.index\n const isMovingUp = startIndex > endIndex\n const selectedItems = entities.filter((item) => selectedIds.includes(item._id))\n const message = [\n `Moved`,\n selectedItems.length === 1 ? `1 document` : `${selectedItems.length} documents`,\n isMovingUp ? `up` : `down`,\n `from position`,\n `${startIndex + 1} to ${endIndex + 1}`,\n ].join(' ')\n\n const {all, selected} = entities.reduce<{\n all: SanityDocumentWithOrder[]\n selected: SanityDocumentWithOrder[]\n }>(\n (acc, cur, curIndex) => {\n // Selected items get spread in below, so skip them here\n if (selectedIds.includes(cur._id)) {\n return {all: acc.all, selected: acc.selected}\n }\n\n // Drop selected items in\n if (curIndex === endIndex) {\n const prevIndex = curIndex - 1\n const prevRank = entities[prevIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[prevIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.min()\n\n const curRank = LexoRank.parse(entities[curIndex][ORDER_FIELD_NAME] as string)\n\n const nextIndex = curIndex + 1\n const nextRank = entities[nextIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[nextIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.max()\n\n let betweenRank = isMovingUp ? prevRank.between(curRank) : curRank.between(nextRank)\n\n // For each selected item, assign a new orderRank between now and next\n for (let selectedIndex = 0; selectedIndex < selectedItems.length; selectedIndex += 1) {\n selectedItems[selectedIndex][ORDER_FIELD_NAME] = betweenRank.toString()\n betweenRank = isMovingUp ? betweenRank.between(curRank) : betweenRank.between(nextRank)\n }\n\n return {\n // The `all` array gets sorted by order field later anyway\n // so that this probably isn't necessary ¯\\_(ツ)_/¯\n all: isMovingUp\n ? [...acc.all, ...selectedItems, cur]\n : [...acc.all, cur, ...selectedItems],\n selected: selectedItems,\n }\n }\n\n return {all: [...acc.all, cur], selected: acc.selected}\n },\n {all: [], selected: []}\n )\n\n const patches = selected.flatMap((doc) => {\n const docPatches: [string, PatchOperations][] = [\n [\n doc._id,\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ],\n ]\n\n // If it's a draft, we need to patch the published document as well\n if (doc._id.startsWith(`drafts.`) && doc.hasPublished) {\n docPatches.push([\n doc._id.replace(`drafts.`, ``),\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ])\n }\n\n return docPatches\n })\n\n // Safety-check to make sure everything is in order\n const allSorted = all.sort(lexicographicalSort)\n\n return {newOrder: allSorted, patches, message}\n}\n","import {useClient} from 'sanity'\n\nexport function useSanityClient() {\n return useClient({apiVersion: '2021-09-01'})\n}\n","import {useEffect, useState, useMemo, useCallback, CSSProperties} from 'react'\nimport {DragDropContext, Draggable, Droppable, type DropResult} from '@hello-pangea/dnd'\nimport {Box, Card, useToast} from '@sanity/ui'\nimport type {PatchOperations} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport Document from './Document'\nimport {reorderDocuments} from './helpers/reorderDocuments'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {useSanityClient} from './helpers/client'\nimport {SanityDocumentWithOrder} from './types'\n\ninterface ListSetting {\n isDuplicate: boolean\n isGhosting: boolean\n isDragging: boolean\n isSelected: boolean\n}\n\nexport interface DraggableListProps {\n data: SanityDocumentWithOrder[]\n listIsUpdating: boolean\n setListIsUpdating: (val: boolean) => void\n}\n\nconst getItemStyle = (\n draggableStyle: CSSProperties | undefined,\n itemIsUpdating: boolean\n): CSSProperties => ({\n userSelect: 'none',\n transition: `opacity 500ms ease-in-out`,\n opacity: itemIsUpdating ? 0.2 : 1,\n pointerEvents: itemIsUpdating ? `none` : undefined,\n ...draggableStyle,\n})\n\nconst cardTone = (settings: ListSetting) => {\n const {isDuplicate, isGhosting, isDragging, isSelected} = settings\n\n if (isGhosting) return `transparent`\n if (isDragging || isSelected) return `primary`\n if (isDuplicate) return `caution`\n\n return undefined\n}\n\nexport default function DraggableList({\n data,\n listIsUpdating,\n setListIsUpdating,\n}: DraggableListProps) {\n const toast = useToast()\n const router = usePaneRouter()\n const {groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n\n // Maintains local state order before transaction completes\n const [orderedData, setOrderedData] = useState<SanityDocumentWithOrder[]>(data)\n\n // Update local state when documents change from an outside source\n useEffect(() => {\n if (!listIsUpdating) setOrderedData(data)\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [data])\n\n const [draggingId, setDraggingId] = useState(``)\n const [selectedIds, setSelectedIds] = useState<string[]>(currentDoc ? [currentDoc] : [])\n\n const clearSelected = useCallback(() => setSelectedIds([]), [setSelectedIds])\n\n const handleSelect = useCallback(\n (clickedId: string, index: number, nativeEvent: MouseEvent) => {\n const isSelected = selectedIds.includes(clickedId)\n const selectMultiple = nativeEvent.shiftKey\n const isUsingWindows = navigator.appVersion.indexOf('Win') !== -1\n const selectAdditional = isUsingWindows ? nativeEvent.ctrlKey : nativeEvent.metaKey\n\n let updatedIds = []\n\n // No modifier keys pressed during click:\n // - update selected to just this one\n // - open document\n if (!selectMultiple && !selectAdditional) {\n return setSelectedIds([clickedId])\n }\n\n // If shift key was held, prevent default to avoid new window opening\n if (selectMultiple) {\n nativeEvent.preventDefault()\n }\n\n // Shift key was held, add id's between last selected and this one\n // ...before adding this one\n if (selectMultiple && !isSelected) {\n const lastSelectedId = selectedIds[selectedIds.length - 1]\n const lastSelectedIndex = orderedData.findIndex((item) => item._id === lastSelectedId)\n\n const firstSelected = index < lastSelectedIndex ? index : lastSelectedIndex\n const lastSelected = index > lastSelectedIndex ? index : lastSelectedIndex\n\n const betweenIds = orderedData\n .filter((item, itemIndex) => itemIndex > firstSelected && itemIndex < lastSelected)\n .map((item) => item._id)\n\n updatedIds = [...selectedIds, ...betweenIds, clickedId]\n } else if (isSelected) {\n // Toggle off a single id\n updatedIds = selectedIds.filter((id) => id !== clickedId)\n } else {\n // Toggle on a single id\n updatedIds = [...selectedIds, clickedId]\n }\n\n return setSelectedIds(updatedIds)\n },\n [setSelectedIds, orderedData, selectedIds]\n )\n\n const client = useSanityClient()\n\n const transactPatches = useCallback(\n async (patches: [string, PatchOperations][], message: string) => {\n const transaction = client.transaction()\n\n patches.forEach(([docId, ops]) => transaction.patch(docId, ops))\n\n await transaction\n .commit()\n .then((updated) => {\n clearSelected()\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `${\n updated.results.length === 1 ? `1 Document` : `${updated.results.length} Documents`\n } Reordered`,\n status: `success`,\n description: message,\n })\n })\n .catch(() => {\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `Reordering failed`,\n status: `error`,\n })\n })\n },\n [client, setDraggingId, clearSelected, setListIsUpdating, toast]\n )\n\n const handleDragEnd = useCallback(\n (result: DropResult | undefined, entities: SanityDocumentWithOrder[]) => {\n setDraggingId(``)\n\n const {source, destination, draggableId} = result ?? {}\n\n // Don't do anything if nothing changed\n if (source?.index === destination?.index) return\n\n // Don't do anything if we don't have the entitites\n if (!entities?.length || !draggableId) return\n\n // A document can be dragged without being one-of-many-selected\n const effectedIds = selectedIds?.length ? selectedIds : [draggableId]\n\n // Don't do anything if we don't have ids to effect\n if (!effectedIds?.length) return\n\n // Update state to update styles + prevent data refetching\n setListIsUpdating(true)\n setSelectedIds(effectedIds)\n\n const {newOrder, patches, message} = reorderDocuments({\n entities,\n selectedIds: effectedIds,\n source,\n destination,\n })\n\n // Update local state\n if (newOrder?.length) {\n setOrderedData(newOrder)\n }\n\n // Transact new order patches\n if (patches?.length) {\n transactPatches(patches, message)\n }\n },\n [selectedIds, setDraggingId, setSelectedIds, transactPatches, setListIsUpdating]\n )\n\n const handleDragStart = useCallback(\n (start: {draggableId: string}) => {\n const id = start.draggableId\n const selected = selectedIds.includes(id)\n\n // if dragging an item that is not selected - unselect all items\n if (!selected) clearSelected()\n\n setDraggingId(id)\n },\n [selectedIds, clearSelected, setDraggingId]\n )\n\n // Move one document up or down one place, by fake invoking the drag function\n const incrementIndex = useCallback(\n (shiftFrom: number, shiftTo: number, id: string, entities: SanityDocumentWithOrder[]) => {\n const result = {\n draggableId: id,\n source: {index: shiftFrom},\n destination: {index: shiftTo},\n }\n\n return handleDragEnd(result as DropResult, entities)\n },\n [handleDragEnd]\n )\n\n const onWindowKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n clearSelected()\n }\n },\n [clearSelected]\n )\n\n useEffect(() => {\n window.addEventListener('keydown', onWindowKeyDown)\n\n return () => {\n window.removeEventListener('keydown', onWindowKeyDown)\n }\n }, [onWindowKeyDown])\n\n // Find all items with duplicate order field\n const duplicateOrders = useMemo(() => {\n if (!orderedData.length) return []\n\n const orderField = orderedData.map((item) => item[ORDER_FIELD_NAME])\n\n return orderField.filter((item, index) => orderField.indexOf(item) !== index)\n }, [orderedData])\n\n const onDragEnd = useCallback(\n (result: DropResult) => handleDragEnd(result, orderedData),\n [orderedData, handleDragEnd]\n )\n\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={onDragEnd}>\n <Droppable droppableId=\"documentSortZone\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {orderedData.map((item, index) => (\n <Draggable\n key={`${item._id}-${item[ORDER_FIELD_NAME]}`}\n draggableId={item._id}\n index={index}\n // onClick={(event) => handleDraggableClick(event, provided, snapshot)}\n >\n {(innerProvided, innerSnapshot) => {\n const isSelected = selectedIds.includes(item._id)\n const isDragging = innerSnapshot.isDragging\n const isGhosting = Boolean(!isDragging && draggingId && isSelected)\n const isUpdating = listIsUpdating && isSelected\n const isDisabled = Boolean(!item[ORDER_FIELD_NAME])\n const isDuplicate = duplicateOrders.includes(item[ORDER_FIELD_NAME])\n const tone = cardTone({isDuplicate, isGhosting, isDragging, isSelected})\n const selectedCount = selectedIds.length\n\n const dragBadge = isDragging && selectedCount > 1 ? selectedCount : false\n\n return (\n <div\n ref={innerProvided.innerRef}\n {...innerProvided.draggableProps}\n {...innerProvided.dragHandleProps}\n style={\n isDisabled\n ? {opacity: 0.2, pointerEvents: `none`}\n : getItemStyle(innerProvided.draggableProps.style, isUpdating)\n }\n >\n <Box paddingBottom={1}>\n <Card\n tone={tone}\n shadow={isDragging ? 2 : undefined}\n radius={2}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={(e) => handleSelect(item._id, index, e.nativeEvent)}\n >\n <Document\n doc={item}\n entities={orderedData}\n increment={incrementIndex}\n index={index}\n isFirst={index === 0}\n isLast={index === orderedData.length - 1}\n dragBadge={dragBadge}\n />\n </Card>\n </Box>\n </div>\n )\n }}\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n )\n}\n","import {useEffect, useMemo, useState} from 'react'\nimport {Box, Flex, Container, Spinner, Stack, Text} from '@sanity/ui'\n\nimport {useListeningQuery, Feedback} from 'sanity-plugin-utils'\nimport DraggableList from './DraggableList'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentListQueryProps {\n type: string\n filter?: string\n params?: Record<string, unknown>\n}\n\nconst DEFAULT_PARAMS = {}\n\nexport default function DocumentListQuery({\n type,\n filter,\n params = DEFAULT_PARAMS,\n}: DocumentListQueryProps) {\n const [listIsUpdating, setListIsUpdating] = useState(false)\n const [data, setData] = useState<SanityDocumentWithOrder[] | null>([])\n\n const query = `*[_type == $type ${filter ? `&& ${filter}` : ''}]|order(@[$order] asc){\n _id, _type, ${ORDER_FIELD_NAME}\n }`\n const queryParams = {\n ...params,\n type,\n order: ORDER_FIELD_NAME,\n }\n\n const {\n data: queryData,\n loading,\n error,\n } = useListeningQuery<SanityDocumentWithOrder[]>(query, {\n params: queryParams,\n initialValue: [],\n })\n\n useEffect(() => {\n if (queryData) {\n const filteredDocuments = queryData.reduce<SanityDocumentWithOrder[]>((acc, cur) => {\n if (!cur._id.startsWith(`drafts.`)) {\n // eslint-disable-next-line max-nested-callbacks\n const alsoHasDraft = queryData.some((doc) => doc._id === `drafts.${cur._id}`)\n return alsoHasDraft ? acc : [...acc, cur]\n }\n\n // Check if the draft has a published version\n cur.hasPublished = queryData.some((doc) => doc._id === cur._id.replace(`drafts.`, ``))\n\n return [...acc, cur]\n }, [])\n\n setData(filteredDocuments)\n } else {\n setData([])\n }\n }, [queryData])\n\n const unorderedDataCount = useMemo(\n () => (data?.length ? data.filter((doc) => !doc[ORDER_FIELD_NAME]).length : 0),\n [data]\n )\n\n if (loading) {\n return (\n <Flex style={{width: `100%`, height: `100%`}} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n if (error) {\n return (\n <Box padding={2}>\n <Feedback tone=\"critical\" title=\"There was an error\" description=\"Please try again later\" />\n </Box>\n )\n }\n\n if (!data || data?.length == 0)\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n No documents of this type\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n\n return (\n <Stack space={1} style={{overflow: `auto`, height: `100%`}}>\n <Box padding={2}>\n {unorderedDataCount > 0 && (\n <Box marginBottom={2}>\n <Feedback\n tone=\"caution\"\n description={\n <>\n {unorderedDataCount}/{data?.length} documents have no order. Select{' '}\n <strong>Reset Order</strong> from the menu above to fix.\n </>\n }\n />\n </Box>\n )}\n <DraggableList\n data={data}\n listIsUpdating={listIsUpdating}\n setListIsUpdating={setListIsUpdating}\n />\n </Box>\n </Stack>\n )\n}\n","import {useEffect, useMemo} from 'react'\nimport {useToast} from '@sanity/ui'\n\nimport {useSchema} from 'sanity'\nimport {Box, type ToastParams} from '@sanity/ui'\nimport {Feedback} from 'sanity-plugin-utils'\nimport DocumentListQuery from './DocumentListQuery'\nimport {OrderableContext} from './OrderableContext'\n\nimport {ORDER_FIELD_NAME} from './helpers/constants'\n\nexport interface DocumentListWrapperProps {\n showIncrements: boolean\n type: string\n resetOrderTransaction: ToastParams\n // eslint-disable-next-line react/require-default-props\n filter?: string\n // eslint-disable-next-line react/require-default-props\n params?: Record<string, unknown>\n}\n\n// 1. Validate first that the schema has been configured for ordering\n// 2. Setup context for showIncrements\nexport default function DocumentListWrapper({\n type,\n showIncrements,\n resetOrderTransaction,\n filter,\n params,\n}: DocumentListWrapperProps) {\n const toast = useToast()\n const schema = useSchema()\n\n useEffect(() => {\n if (resetOrderTransaction?.title && resetOrderTransaction?.status) {\n toast.push(resetOrderTransaction)\n }\n }, [resetOrderTransaction, toast])\n\n const schemaIsInvalid = useMemo(() => {\n // Option not passed\n if (!type) {\n return (\n <>\n No <code>type</code> was configured\n </>\n )\n }\n\n const typeSchema = schema.get(type)\n\n // Schema not found\n if (!typeSchema) {\n return (\n <>\n Schema <code>{type}</code> not found\n </>\n )\n }\n\n // Schema lacks an order field\n if (\n !('fields' in typeSchema) ||\n !typeSchema.fields.some((field) => field?.name === ORDER_FIELD_NAME)\n ) {\n return (\n <>\n Schema <code>{type}</code> must have an <code>{ORDER_FIELD_NAME}</code> field of type{' '}\n <code>string</code>\n </>\n )\n }\n\n // Schema's order field is not a string\n if (\n 'fields' in typeSchema &&\n typeSchema.fields.some(\n (field) => field?.name === ORDER_FIELD_NAME && field?.type?.name !== 'string'\n )\n ) {\n return (\n <>\n <code>{ORDER_FIELD_NAME}</code> field on Schema <code>{type}</code> must be{' '}\n <code>string</code> type\n </>\n )\n }\n\n return ''\n }, [type, schema])\n\n if (schemaIsInvalid) {\n return (\n <Box padding={2}>\n <Feedback description={schemaIsInvalid} tone=\"caution\" />\n </Box>\n )\n }\n\n return (\n <OrderableContext.Provider value={{showIncrements}}>\n <DocumentListQuery type={type} filter={filter} params={params} />\n </OrderableContext.Provider>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport {SanityClient} from '@sanity/client'\nimport {ORDER_FIELD_NAME} from './constants'\n// Function to wipe and re-do ordering with LexoRank\n// Will at least attempt to start with the current order\nexport async function resetOrder(type = ``, client: SanityClient) {\n const query = `*[_type == $type]|order(@[$order] asc)._id`\n const queryParams = {type, order: ORDER_FIELD_NAME}\n const documents = await client.fetch(query, queryParams)\n\n if (!documents.length) {\n return null\n }\n\n const transaction = client.transaction()\n let aLexoRank = LexoRank.min()\n\n for (let index = 0; index < documents.length; index += 1) {\n // Generate next rank before even the first document so there's room to move!\n aLexoRank = aLexoRank.genNext().genNext()\n\n transaction.patch(documents[index], {\n set: {[ORDER_FIELD_NAME]: aLexoRank.toString()},\n })\n }\n\n return transaction\n .commit()\n .then((update) => update)\n .catch((err) => err)\n}\n","import {Component} from 'react'\n\nimport {SanityClient} from '@sanity/client'\nimport type {ToastParams} from '@sanity/ui'\nimport DocumentListWrapper from './DocumentListWrapper'\nimport {resetOrder} from './helpers/resetOrder'\n\nexport interface OrderableDocumentListProps {\n options: {\n type: string\n client: SanityClient\n filter?: string\n params?: Record<string, unknown>\n }\n}\n\ninterface State {\n showIncrements: boolean\n resetOrderTransaction: ToastParams\n}\n\n// Must use a Class Component here so the actionHandlers can be called\nexport default class OrderableDocumentList extends Component<OrderableDocumentListProps, State> {\n constructor(props: OrderableDocumentListProps) {\n super(props)\n this.state = {\n showIncrements: false,\n resetOrderTransaction: {},\n }\n }\n\n actionHandlers = {\n showIncrements: () => {\n this.setState((state) => ({\n showIncrements: !state.showIncrements,\n }))\n },\n\n resetOrder: async () => {\n this.setState(() => ({\n resetOrderTransaction: {\n status: `info`,\n title: `Reordering started...`,\n closable: true,\n },\n }))\n\n const update = await resetOrder(this.props.options.type, this.props.options.client)\n\n const reorderWasSuccessful = update?.results?.length\n\n this.setState(() => ({\n resetOrderTransaction: {\n status: reorderWasSuccessful ? `success` : `info`,\n title: reorderWasSuccessful\n ? `Reordered ${update.results.length === 1 ? `Document` : `Documents`}`\n : `Reordering failed`,\n closable: true,\n },\n }))\n },\n }\n\n render() {\n const type = this?.props?.options?.type\n if (!type) {\n return null\n }\n return (\n <DocumentListWrapper\n filter={this?.props?.options?.filter}\n params={this?.props?.options?.params}\n type={type}\n showIncrements={this.state.showIncrements}\n resetOrderTransaction={this.state.resetOrderTransaction}\n />\n )\n }\n}\n","import {GenerateIcon, SortIcon} from '@sanity/icons'\nimport type {ConfigContext} from 'sanity'\n\nimport {ComponentType} from 'react'\nimport {StructureBuilder, type ListItem} from 'sanity/desk'\nimport OrderableDocumentList from '../OrderableDocumentList'\n\nexport interface OrderableListConfig {\n type: string\n id?: string\n title?: string\n icon?: ComponentType\n params?: Record<string, unknown>\n filter?: string\n context: ConfigContext\n S: StructureBuilder\n}\n\nexport function orderableDocumentListDeskItem(config: OrderableListConfig): ListItem {\n if (!config?.type || !config.context || !config.S) {\n throw new Error(`\n type, context and S (StructureBuilder) must be provided.\n context and S are available when configuring structure.\n Example: orderableDocumentListDeskItem({type: 'category'})\n `)\n }\n\n const {type, filter, params, title, icon, id, context, S} = config\n const {schema, getClient} = context\n const client = getClient({apiVersion: '2021-09-01'})\n\n const listTitle = title ?? `Orderable ${type}`\n const listId = id ?? `orderable-${type}`\n const listIcon = icon ?? SortIcon\n const typeTitle = schema.get(type)?.title ?? type\n\n return S.listItem()\n .title(listTitle)\n .id(listId)\n .icon(listIcon)\n .child(\n Object.assign(S.documentTypeList(type).serialize(), {\n // Prevents the component from re-rendering when switching documents\n __preserveInstance: true,\n // Prevents the component from NOT re-rendering when switching listItems\n key: listId,\n\n type: 'component',\n component: OrderableDocumentList,\n options: {type, filter, params, client},\n menuItems: [\n S.menuItem()\n .title(`Create new ${typeTitle}`)\n .intent({type: 'create', params: {type}})\n .serialize(),\n S.menuItem().title(`Reset Order`).icon(GenerateIcon).action(`resetOrder`).serialize(),\n S.menuItem()\n .title(`Toggle Increments`)\n .icon(SortIcon)\n .action(`showIncrements`)\n .serialize(),\n ],\n })\n )\n .serialize()\n}\n"],"names":["ORDER_FIELD_NAME","initialRank","lastRankValue","lastRank","LexoRank","parse","min","nextRank","genNext","toString","orderRankField","config","type","Error","defineField","title","readOnly","hidden","name","initialValue","p","_ref","getClient","lastDocOrderRank","apiVersion","fetch","order","orderRankOrdering","by","field","direction","OrderableContext","React","createContext","Document","_ref2","doc","increment","entities","index","isFirst","isLast","dragBadge","_a","_b","showIncrements","useContext","schema","useSchema","router","usePaneRouter","ChildLink","groupIndex","routerPanesState","currentDoc","id","pressed","_id","replace","selected","length","Link","useMemo","LinkComponent","linkProps","childId","jsx","PreviewCard","__unstable_focusRing","as","radius","sizing","tabIndex","tone","width","flex","children","jsxs","Flex","align","Box","paddingX","style","flexShrink","Text","size","DragHandleIcon","cursor","gap","paddingRight","Button","padding","mode","onClick","disabled","icon","ChevronUpIcon","ChevronDownIcon","Preview","layout","value","schemaType","get","_type","Card","marginRight","AvatarCounter","count","lexicographicalSort","a","b","reorderDocuments","_ref3","selectedIds","source","destination","startIndex","endIndex","isMovingUp","selectedItems","filter","item","includes","message","concat","join","all","reduce","acc","cur","curIndex","_c","_d","prevIndex","prevRank","curRank","nextIndex","max","betweenRank","between","selectedIndex","patches","flatMap","docPatches","set","startsWith","hasPublished","push","allSorted","sort","newOrder","useSanityClient","useClient","getItemStyle","draggableStyle","itemIsUpdating","userSelect","transition","opacity","pointerEvents","cardTone","settings","isDuplicate","isGhosting","isDragging","isSelected","DraggableList","_ref4","data","listIsUpdating","setListIsUpdating","toast","useToast","orderedData","setOrderedData","useState","useEffect","draggingId","setDraggingId","setSelectedIds","clearSelected","useCallback","handleSelect","clickedId","nativeEvent","selectMultiple","shiftKey","isUsingWindows","navigator","appVersion","indexOf","selectAdditional","ctrlKey","metaKey","updatedIds","preventDefault","lastSelectedId","lastSelectedIndex","findIndex","firstSelected","lastSelected","betweenIds","itemIndex","map","client","transactPatches","transaction","forEach","_ref5","docId","ops","patch","commit","then","updated","results","status","description","catch","handleDragEnd","result","draggableId","effectedIds","handleDragStart","start","incrementIndex","shiftFrom","shiftTo","onWindowKeyDown","event","key","window","addEventListener","removeEventListener","duplicateOrders","orderField","onDragEnd","DragDropContext","onDragStart","Droppable","droppableId","provided","droppableProps","ref","innerRef","Draggable","innerProvided","innerSnapshot","Boolean","isUpdating","isDisabled","selectedCount","draggableProps","dragHandleProps","paddingBottom","shadow","e","placeholder","DEFAULT_PARAMS","DocumentListQuery","_ref6","params","setData","query","queryParams","queryData","loading","error","useListeningQuery","filteredDocuments","alsoHasDraft","some","unorderedDataCount","height","justify","Spinner","Feedback","Container","paddingY","muted","Stack","space","overflow","marginBottom","Fragment","DocumentListWrapper","_ref7","resetOrderTransaction","schemaIsInvalid","typeSchema","fields","Provider","resetOrder","arguments","undefined","documents","aLexoRank","update","err","OrderableDocumentList","Component","constructor","props","__publicField","setState","state","closable","options","reorderWasSuccessful","render","_e","_f","orderableDocumentListDeskItem","context","S","listTitle","listId","listIcon","SortIcon","typeTitle","listItem","child","Object","assign","documentTypeList","serialize","__preserveInstance","component","menuItems","menuItem","intent","GenerateIcon","action"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/helpers/constants.ts","../src/helpers/initialRank.ts","../src/fields/orderRankField.ts","../src/fields/orderRankOrdering.ts","../src/OrderableContext.ts","../src/Document.tsx","../src/helpers/reorderDocuments.ts","../src/helpers/client.ts","../src/DraggableList.tsx","../src/DocumentListQuery.tsx","../src/DocumentListWrapper.tsx","../src/helpers/resetOrder.ts","../src/OrderableDocumentList.tsx","../src/desk-structure/orderableDocumentListDeskItem.ts"],"sourcesContent":["export const ORDER_FIELD_NAME = `orderRank` as const\n","import {LexoRank} from 'lexorank'\n\n// Use in initial value field by passing in the rank value of the last document\n// If not value passed, generate a sensibly low rank\nexport default function initialRank(lastRankValue = ``): string {\n const lastRank = lastRankValue ? LexoRank.parse(lastRankValue) : LexoRank.min()\n const nextRank = lastRank.genNext().genNext()\n\n return nextRank.toString()\n}\n","import {type ConfigContext, defineField} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\nimport initialRank from '../helpers/initialRank'\n\nexport type SchemaContext = Omit<ConfigContext, 'schema' | 'currentUser' | 'client'>\n\nexport interface RankFieldConfig {\n type: string\n}\n\nexport const orderRankField = (config: RankFieldConfig) => {\n if (!config?.type) {\n throw new Error(\n `\n type must be provided.\n Example: orderRankField({type: 'category'})\n `\n )\n }\n\n const {type} = config\n return defineField({\n title: 'Order Rank',\n readOnly: true,\n hidden: true,\n ...config,\n name: ORDER_FIELD_NAME,\n type: 'string',\n initialValue: async (p, {getClient}) => {\n const lastDocOrderRank = await getClient({apiVersion: '2021-09-01'}).fetch(\n `*[_type == $type]|order(@[$order] desc)[0][$order]`,\n {type, order: ORDER_FIELD_NAME}\n )\n return initialRank(lastDocOrderRank)\n },\n })\n}\n","import {SortOrdering} from 'sanity'\nimport {ORDER_FIELD_NAME} from '../helpers/constants'\n\nexport const orderRankOrdering: SortOrdering = {\n title: 'Ordered',\n name: 'ordered',\n by: [{field: ORDER_FIELD_NAME, direction: 'asc'}],\n}\n","import React from 'react'\n\nexport interface OrderableContextValue {\n showIncrements?: boolean\n}\n\nexport const OrderableContext = React.createContext<OrderableContextValue>({})\n","import {useContext, useMemo, type ReactNode} from 'react'\nimport {ChevronDownIcon, ChevronUpIcon, DragHandleIcon} from '@sanity/icons'\nimport {AvatarCounter, Card, Box, Button, Flex, Text} from '@sanity/ui'\nimport {useSchema, SchemaType, PreviewCard, Preview} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport {OrderableContext} from './OrderableContext'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentProps {\n doc: SanityDocumentWithOrder\n entities: SanityDocumentWithOrder[]\n increment: (\n index: number,\n nextIndex: number,\n docId: string,\n entities: SanityDocumentWithOrder[]\n ) => void\n index: number\n isFirst: boolean\n isLast: boolean\n dragBadge: number | false\n}\n\nexport default function Document({\n doc,\n increment,\n entities,\n index,\n isFirst,\n isLast,\n dragBadge,\n}: DocumentProps) {\n const {showIncrements} = useContext(OrderableContext)\n const schema = useSchema()\n const router = usePaneRouter()\n const {ChildLink, groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n const pressed = currentDoc === doc._id || currentDoc === doc._id.replace(`drafts.`, ``)\n const selected = pressed && routerPanesState.length === groupIndex + 2\n\n const Link = useMemo(\n () =>\n function LinkComponent(linkProps: {children: ReactNode}) {\n return <ChildLink {...linkProps} childId={doc._id} />\n },\n [ChildLink, doc._id]\n )\n\n return (\n <PreviewCard\n __unstable_focusRing\n // @ts-expect-error\n as={Link}\n data-as=\"a\"\n data-ui=\"PaneItem\"\n radius={2}\n pressed={pressed}\n selected={selected}\n sizing=\"border\"\n tabIndex={-1}\n tone=\"inherit\"\n width=\"100%\"\n flex={1}\n >\n <Flex align=\"center\">\n <Box paddingX={2} style={{flexShrink: 0}}>\n <Text size={2}>\n <DragHandleIcon cursor=\"grab\" />\n </Text>\n </Box>\n {showIncrements && (\n <Flex style={{flexShrink: 0}} align=\"center\" gap={1} paddingRight={1}>\n <Button\n padding={2}\n mode=\"ghost\"\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + -1, doc._id, entities)}\n disabled={isFirst}\n icon={ChevronUpIcon}\n />\n <Button\n padding={2}\n mode=\"ghost\"\n disabled={isLast}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={() => increment(index, index + 1, doc._id, entities)}\n icon={ChevronDownIcon}\n />\n </Flex>\n )}\n <Box style={{width: `100%`}}>\n <Flex flex={1} align=\"center\">\n <Preview\n layout=\"default\"\n value={doc}\n schemaType={schema.get(doc._type) as SchemaType}\n />\n </Flex>\n </Box>\n {dragBadge && (\n <Card tone=\"default\" marginRight={4} radius={5}>\n <AvatarCounter count={dragBadge} />\n </Card>\n )}\n </Flex>\n </PreviewCard>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport type {PatchOperations} from 'sanity'\n\nimport {SanityDocumentWithOrder} from '../types'\nimport {ORDER_FIELD_NAME} from './constants'\n\nexport interface MaifestArgs {\n entities: SanityDocumentWithOrder[]\n selectedItems: SanityDocumentWithOrder[]\n isMovingUp: boolean\n curIndex: number\n nextIndex: number\n prevIndex: number\n}\n\nexport interface ReorderArgs {\n entities: SanityDocumentWithOrder[]\n selectedIds: string[]\n source: any\n destination: any\n}\n\nexport interface ReorderReturn {\n newOrder: SanityDocumentWithOrder[]\n patches: [string, PatchOperations][]\n message: any\n}\n\nfunction lexicographicalSort(a: SanityDocumentWithOrder, b: SanityDocumentWithOrder) {\n if (!a[ORDER_FIELD_NAME] || !b[ORDER_FIELD_NAME]) {\n return 0\n } else if (a[ORDER_FIELD_NAME] < b[ORDER_FIELD_NAME]) {\n return -1\n } else if (a[ORDER_FIELD_NAME] > b[ORDER_FIELD_NAME]) {\n return 1\n }\n return 0\n}\n\nexport const reorderDocuments = ({\n entities,\n selectedIds,\n source,\n destination,\n}: ReorderArgs): ReorderReturn => {\n const startIndex = source.index\n const endIndex = destination.index\n const isMovingUp = startIndex > endIndex\n const selectedItems = entities.filter((item) => selectedIds.includes(item._id))\n const message = [\n `Moved`,\n selectedItems.length === 1 ? `1 document` : `${selectedItems.length} documents`,\n isMovingUp ? `up` : `down`,\n `from position`,\n `${startIndex + 1} to ${endIndex + 1}`,\n ].join(' ')\n\n const {all, selected} = entities.reduce<{\n all: SanityDocumentWithOrder[]\n selected: SanityDocumentWithOrder[]\n }>(\n (acc, cur, curIndex) => {\n // Selected items get spread in below, so skip them here\n if (selectedIds.includes(cur._id)) {\n return {all: acc.all, selected: acc.selected}\n }\n\n // Drop selected items in\n if (curIndex === endIndex) {\n const prevIndex = curIndex - 1\n const prevRank = entities[prevIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[prevIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.min()\n\n const curRank = LexoRank.parse(entities[curIndex][ORDER_FIELD_NAME] as string)\n\n const nextIndex = curIndex + 1\n const nextRank = entities[nextIndex]?.[ORDER_FIELD_NAME]\n ? LexoRank.parse(entities[nextIndex]?.[ORDER_FIELD_NAME] as string)\n : LexoRank.max()\n\n let betweenRank = isMovingUp ? prevRank.between(curRank) : curRank.between(nextRank)\n\n // For each selected item, assign a new orderRank between now and next\n for (let selectedIndex = 0; selectedIndex < selectedItems.length; selectedIndex += 1) {\n selectedItems[selectedIndex][ORDER_FIELD_NAME] = betweenRank.toString()\n betweenRank = isMovingUp ? betweenRank.between(curRank) : betweenRank.between(nextRank)\n }\n\n return {\n // The `all` array gets sorted by order field later anyway\n // so that this probably isn't necessary ¯\\_(ツ)_/¯\n all: isMovingUp\n ? [...acc.all, ...selectedItems, cur]\n : [...acc.all, cur, ...selectedItems],\n selected: selectedItems,\n }\n }\n\n return {all: [...acc.all, cur], selected: acc.selected}\n },\n {all: [], selected: []}\n )\n\n const patches = selected.flatMap((doc) => {\n const docPatches: [string, PatchOperations][] = [\n [\n doc._id,\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ],\n ]\n\n // If it's a draft, we need to patch the published document as well\n if (doc._id.startsWith(`drafts.`) && doc.hasPublished) {\n docPatches.push([\n doc._id.replace(`drafts.`, ``),\n {\n set: {\n [ORDER_FIELD_NAME]: doc[ORDER_FIELD_NAME],\n },\n },\n ])\n }\n\n return docPatches\n })\n\n // Safety-check to make sure everything is in order\n const allSorted = all.sort(lexicographicalSort)\n\n return {newOrder: allSorted, patches, message}\n}\n","import {useClient} from 'sanity'\n\nexport function useSanityClient() {\n return useClient({apiVersion: '2021-09-01'})\n}\n","import {useEffect, useState, useMemo, useCallback, CSSProperties} from 'react'\nimport {DragDropContext, Draggable, Droppable, type DropResult} from '@hello-pangea/dnd'\nimport {Box, Card, useToast} from '@sanity/ui'\nimport type {PatchOperations} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport Document from './Document'\nimport {reorderDocuments} from './helpers/reorderDocuments'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {useSanityClient} from './helpers/client'\nimport {SanityDocumentWithOrder} from './types'\n\ninterface ListSetting {\n isDuplicate: boolean\n isGhosting: boolean\n isDragging: boolean\n isSelected: boolean\n}\n\nexport interface DraggableListProps {\n data: SanityDocumentWithOrder[]\n listIsUpdating: boolean\n setListIsUpdating: (val: boolean) => void\n}\n\nconst getItemStyle = (\n draggableStyle: CSSProperties | undefined,\n itemIsUpdating: boolean\n): CSSProperties => ({\n userSelect: 'none',\n transition: `opacity 500ms ease-in-out`,\n opacity: itemIsUpdating ? 0.2 : 1,\n pointerEvents: itemIsUpdating ? `none` : undefined,\n ...draggableStyle,\n})\n\nconst cardTone = (settings: ListSetting) => {\n const {isDuplicate, isGhosting, isDragging, isSelected} = settings\n\n if (isGhosting) return `transparent`\n if (isDragging || isSelected) return `primary`\n if (isDuplicate) return `caution`\n\n return undefined\n}\n\nexport default function DraggableList({\n data,\n listIsUpdating,\n setListIsUpdating,\n}: DraggableListProps) {\n const toast = useToast()\n const router = usePaneRouter()\n const {groupIndex, routerPanesState} = router\n\n const currentDoc = routerPanesState[groupIndex + 1]?.[0]?.id || false\n\n // Maintains local state order before transaction completes\n const [orderedData, setOrderedData] = useState<SanityDocumentWithOrder[]>(data)\n\n // Update local state when documents change from an outside source\n useEffect(() => {\n if (!listIsUpdating) setOrderedData(data)\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [data])\n\n const [draggingId, setDraggingId] = useState(``)\n const [selectedIds, setSelectedIds] = useState<string[]>(currentDoc ? [currentDoc] : [])\n\n const clearSelected = useCallback(() => setSelectedIds([]), [setSelectedIds])\n\n const handleSelect = useCallback(\n (clickedId: string, index: number, nativeEvent: MouseEvent) => {\n const isSelected = selectedIds.includes(clickedId)\n const selectMultiple = nativeEvent.shiftKey\n const isUsingWindows = navigator.appVersion.indexOf('Win') !== -1\n const selectAdditional = isUsingWindows ? nativeEvent.ctrlKey : nativeEvent.metaKey\n\n let updatedIds = []\n\n // No modifier keys pressed during click:\n // - update selected to just this one\n // - open document\n if (!selectMultiple && !selectAdditional) {\n return setSelectedIds([clickedId])\n }\n\n // If shift key was held, prevent default to avoid new window opening\n if (selectMultiple) {\n nativeEvent.preventDefault()\n }\n\n // Shift key was held, add id's between last selected and this one\n // ...before adding this one\n if (selectMultiple && !isSelected) {\n const lastSelectedId = selectedIds[selectedIds.length - 1]\n const lastSelectedIndex = orderedData.findIndex((item) => item._id === lastSelectedId)\n\n const firstSelected = index < lastSelectedIndex ? index : lastSelectedIndex\n const lastSelected = index > lastSelectedIndex ? index : lastSelectedIndex\n\n const betweenIds = orderedData\n .filter((item, itemIndex) => itemIndex > firstSelected && itemIndex < lastSelected)\n .map((item) => item._id)\n\n updatedIds = [...selectedIds, ...betweenIds, clickedId]\n } else if (isSelected) {\n // Toggle off a single id\n updatedIds = selectedIds.filter((id) => id !== clickedId)\n } else {\n // Toggle on a single id\n updatedIds = [...selectedIds, clickedId]\n }\n\n return setSelectedIds(updatedIds)\n },\n [setSelectedIds, orderedData, selectedIds]\n )\n\n const client = useSanityClient()\n\n const transactPatches = useCallback(\n async (patches: [string, PatchOperations][], message: string) => {\n const transaction = client.transaction()\n\n patches.forEach(([docId, ops]) => transaction.patch(docId, ops))\n\n await transaction\n .commit()\n .then((updated) => {\n clearSelected()\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `${\n updated.results.length === 1 ? `1 Document` : `${updated.results.length} Documents`\n } Reordered`,\n status: `success`,\n description: message,\n })\n })\n .catch(() => {\n setDraggingId(``)\n setListIsUpdating(false)\n toast.push({\n title: `Reordering failed`,\n status: `error`,\n })\n })\n },\n [client, setDraggingId, clearSelected, setListIsUpdating, toast]\n )\n\n const handleDragEnd = useCallback(\n (result: DropResult | undefined, entities: SanityDocumentWithOrder[]) => {\n setDraggingId(``)\n\n const {source, destination, draggableId} = result ?? {}\n\n // Don't do anything if nothing changed\n if (source?.index === destination?.index) return\n\n // Don't do anything if we don't have the entitites\n if (!entities?.length || !draggableId) return\n\n // A document can be dragged without being one-of-many-selected\n const effectedIds = selectedIds?.length ? selectedIds : [draggableId]\n\n // Don't do anything if we don't have ids to effect\n if (!effectedIds?.length) return\n\n // Update state to update styles + prevent data refetching\n setListIsUpdating(true)\n setSelectedIds(effectedIds)\n\n const {newOrder, patches, message} = reorderDocuments({\n entities,\n selectedIds: effectedIds,\n source,\n destination,\n })\n\n // Update local state\n if (newOrder?.length) {\n setOrderedData(newOrder)\n }\n\n // Transact new order patches\n if (patches?.length) {\n transactPatches(patches, message)\n }\n },\n [selectedIds, setDraggingId, setSelectedIds, transactPatches, setListIsUpdating]\n )\n\n const handleDragStart = useCallback(\n (start: {draggableId: string}) => {\n const id = start.draggableId\n const selected = selectedIds.includes(id)\n\n // if dragging an item that is not selected - unselect all items\n if (!selected) clearSelected()\n\n setDraggingId(id)\n },\n [selectedIds, clearSelected, setDraggingId]\n )\n\n // Move one document up or down one place, by fake invoking the drag function\n const incrementIndex = useCallback(\n (shiftFrom: number, shiftTo: number, id: string, entities: SanityDocumentWithOrder[]) => {\n const result = {\n draggableId: id,\n source: {index: shiftFrom},\n destination: {index: shiftTo},\n }\n\n return handleDragEnd(result as DropResult, entities)\n },\n [handleDragEnd]\n )\n\n const onWindowKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n clearSelected()\n }\n },\n [clearSelected]\n )\n\n useEffect(() => {\n window.addEventListener('keydown', onWindowKeyDown)\n\n return () => {\n window.removeEventListener('keydown', onWindowKeyDown)\n }\n }, [onWindowKeyDown])\n\n // Find all items with duplicate order field\n const duplicateOrders = useMemo(() => {\n if (!orderedData.length) return []\n\n const orderField = orderedData.map((item) => item[ORDER_FIELD_NAME])\n\n return orderField.filter((item, index) => orderField.indexOf(item) !== index)\n }, [orderedData])\n\n const onDragEnd = useCallback(\n (result: DropResult) => handleDragEnd(result, orderedData),\n [orderedData, handleDragEnd]\n )\n\n return (\n <DragDropContext onDragStart={handleDragStart} onDragEnd={onDragEnd}>\n <Droppable droppableId=\"documentSortZone\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {orderedData.map((item, index) => (\n <Draggable\n key={`${item._id}-${item[ORDER_FIELD_NAME]}`}\n draggableId={item._id}\n index={index}\n // onClick={(event) => handleDraggableClick(event, provided, snapshot)}\n >\n {(innerProvided, innerSnapshot) => {\n const isSelected = selectedIds.includes(item._id)\n const isDragging = innerSnapshot.isDragging\n const isGhosting = Boolean(!isDragging && draggingId && isSelected)\n const isUpdating = listIsUpdating && isSelected\n const isDisabled = Boolean(!item[ORDER_FIELD_NAME])\n const isDuplicate = duplicateOrders.includes(item[ORDER_FIELD_NAME])\n const tone = cardTone({isDuplicate, isGhosting, isDragging, isSelected})\n const selectedCount = selectedIds.length\n\n const dragBadge = isDragging && selectedCount > 1 ? selectedCount : false\n\n return (\n <div\n ref={innerProvided.innerRef}\n {...innerProvided.draggableProps}\n {...innerProvided.dragHandleProps}\n style={\n isDisabled\n ? {opacity: 0.2, pointerEvents: `none`}\n : getItemStyle(innerProvided.draggableProps.style, isUpdating)\n }\n >\n <Box paddingBottom={1}>\n <Card\n tone={tone}\n shadow={isDragging ? 2 : undefined}\n radius={2}\n // eslint-disable-next-line react/jsx-no-bind\n onClick={(e) => handleSelect(item._id, index, e.nativeEvent)}\n >\n <Document\n doc={item}\n entities={orderedData}\n increment={incrementIndex}\n index={index}\n isFirst={index === 0}\n isLast={index === orderedData.length - 1}\n dragBadge={dragBadge}\n />\n </Card>\n </Box>\n </div>\n )\n }}\n </Draggable>\n ))}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n )\n}\n","import {useEffect, useMemo, useState} from 'react'\nimport {Box, Flex, Container, Spinner, Stack, Text} from '@sanity/ui'\n\nimport {useListeningQuery, Feedback} from 'sanity-plugin-utils'\nimport DraggableList from './DraggableList'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport {SanityDocumentWithOrder} from './types'\n\nexport interface DocumentListQueryProps {\n type: string\n filter?: string\n params?: Record<string, unknown>\n}\n\nconst DEFAULT_PARAMS = {}\n\nexport default function DocumentListQuery({\n type,\n filter,\n params = DEFAULT_PARAMS,\n}: DocumentListQueryProps) {\n const [listIsUpdating, setListIsUpdating] = useState(false)\n const [data, setData] = useState<SanityDocumentWithOrder[] | null>([])\n\n const query = `*[_type == $type ${filter ? `&& ${filter}` : ''}]|order(@[$order] asc){\n _id, _type, ${ORDER_FIELD_NAME}\n }`\n const queryParams = {\n ...params,\n type,\n order: ORDER_FIELD_NAME,\n }\n\n const {\n data: queryData,\n loading,\n error,\n } = useListeningQuery<SanityDocumentWithOrder[]>(query, {\n params: queryParams,\n initialValue: [],\n })\n\n useEffect(() => {\n if (queryData) {\n const filteredDocuments = queryData.reduce<SanityDocumentWithOrder[]>((acc, cur) => {\n if (!cur._id.startsWith(`drafts.`)) {\n // eslint-disable-next-line max-nested-callbacks\n const alsoHasDraft = queryData.some((doc) => doc._id === `drafts.${cur._id}`)\n return alsoHasDraft ? acc : [...acc, cur]\n }\n\n // Check if the draft has a published version\n cur.hasPublished = queryData.some((doc) => doc._id === cur._id.replace(`drafts.`, ``))\n\n return [...acc, cur]\n }, [])\n\n setData(filteredDocuments)\n } else {\n setData([])\n }\n }, [queryData])\n\n const unorderedDataCount = useMemo(\n () => (data?.length ? data.filter((doc) => !doc[ORDER_FIELD_NAME]).length : 0),\n [data]\n )\n\n if (loading) {\n return (\n <Flex style={{width: `100%`, height: `100%`}} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n }\n\n if (error) {\n return (\n <Box padding={2}>\n <Feedback tone=\"critical\" title=\"There was an error\" description=\"Please try again later\" />\n </Box>\n )\n }\n\n if (!data || data?.length == 0)\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n No documents of this type\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n\n return (\n <Stack space={1} style={{overflow: `auto`, height: `100%`}}>\n <Box padding={2}>\n {unorderedDataCount > 0 && (\n <Box marginBottom={2}>\n <Feedback\n tone=\"caution\"\n description={\n <>\n {unorderedDataCount}/{data?.length} documents have no order. Select{' '}\n <strong>Reset Order</strong> from the menu above to fix.\n </>\n }\n />\n </Box>\n )}\n <DraggableList\n data={data}\n listIsUpdating={listIsUpdating}\n setListIsUpdating={setListIsUpdating}\n />\n </Box>\n </Stack>\n )\n}\n","import {useEffect, useMemo} from 'react'\nimport {useToast} from '@sanity/ui'\n\nimport {useSchema} from 'sanity'\nimport {Box, type ToastParams} from '@sanity/ui'\nimport {Feedback} from 'sanity-plugin-utils'\nimport DocumentListQuery from './DocumentListQuery'\nimport {OrderableContext} from './OrderableContext'\n\nimport {ORDER_FIELD_NAME} from './helpers/constants'\n\nexport interface DocumentListWrapperProps {\n showIncrements: boolean\n type: string\n resetOrderTransaction: ToastParams\n // eslint-disable-next-line react/require-default-props\n filter?: string\n // eslint-disable-next-line react/require-default-props\n params?: Record<string, unknown>\n}\n\n// 1. Validate first that the schema has been configured for ordering\n// 2. Setup context for showIncrements\nexport default function DocumentListWrapper({\n type,\n showIncrements,\n resetOrderTransaction,\n filter,\n params,\n}: DocumentListWrapperProps) {\n const toast = useToast()\n const schema = useSchema()\n\n useEffect(() => {\n if (resetOrderTransaction?.title && resetOrderTransaction?.status) {\n toast.push(resetOrderTransaction)\n }\n }, [resetOrderTransaction, toast])\n\n const schemaIsInvalid = useMemo(() => {\n // Option not passed\n if (!type) {\n return (\n <>\n No <code>type</code> was configured\n </>\n )\n }\n\n const typeSchema = schema.get(type)\n\n // Schema not found\n if (!typeSchema) {\n return (\n <>\n Schema <code>{type}</code> not found\n </>\n )\n }\n\n // Schema lacks an order field\n if (\n !('fields' in typeSchema) ||\n !typeSchema.fields.some((field) => field?.name === ORDER_FIELD_NAME)\n ) {\n return (\n <>\n Schema <code>{type}</code> must have an <code>{ORDER_FIELD_NAME}</code> field of type{' '}\n <code>string</code>\n </>\n )\n }\n\n // Schema's order field is not a string\n if (\n 'fields' in typeSchema &&\n typeSchema.fields.some(\n (field) => field?.name === ORDER_FIELD_NAME && field?.type?.name !== 'string'\n )\n ) {\n return (\n <>\n <code>{ORDER_FIELD_NAME}</code> field on Schema <code>{type}</code> must be{' '}\n <code>string</code> type\n </>\n )\n }\n\n return ''\n }, [type, schema])\n\n if (schemaIsInvalid) {\n return (\n <Box padding={2}>\n <Feedback description={schemaIsInvalid} tone=\"caution\" />\n </Box>\n )\n }\n\n return (\n <OrderableContext.Provider value={{showIncrements}}>\n <DocumentListQuery type={type} filter={filter} params={params} />\n </OrderableContext.Provider>\n )\n}\n","import {LexoRank} from 'lexorank'\nimport {SanityClient} from '@sanity/client'\nimport {ORDER_FIELD_NAME} from './constants'\n// Function to wipe and re-do ordering with LexoRank\n// Will at least attempt to start with the current order\nexport async function resetOrder(type = ``, client: SanityClient) {\n const query = `*[_type == $type]|order(@[$order] asc)._id`\n const queryParams = {type, order: ORDER_FIELD_NAME}\n const documents = await client.fetch(query, queryParams)\n\n if (!documents.length) {\n return null\n }\n\n const transaction = client.transaction()\n let aLexoRank = LexoRank.min()\n\n for (let index = 0; index < documents.length; index += 1) {\n // Generate next rank before even the first document so there's room to move!\n aLexoRank = aLexoRank.genNext().genNext()\n\n transaction.patch(documents[index], {\n set: {[ORDER_FIELD_NAME]: aLexoRank.toString()},\n })\n }\n\n return transaction\n .commit()\n .then((update) => update)\n .catch((err) => err)\n}\n","import {Component} from 'react'\n\nimport {SanityClient} from '@sanity/client'\nimport type {ToastParams} from '@sanity/ui'\nimport DocumentListWrapper from './DocumentListWrapper'\nimport {resetOrder} from './helpers/resetOrder'\n\nexport interface OrderableDocumentListProps {\n options: {\n type: string\n client: SanityClient\n filter?: string\n params?: Record<string, unknown>\n }\n}\n\ninterface State {\n showIncrements: boolean\n resetOrderTransaction: ToastParams\n}\n\n// Must use a Class Component here so the actionHandlers can be called\nexport default class OrderableDocumentList extends Component<OrderableDocumentListProps, State> {\n constructor(props: OrderableDocumentListProps) {\n super(props)\n this.state = {\n showIncrements: false,\n resetOrderTransaction: {},\n }\n }\n\n actionHandlers = {\n showIncrements: () => {\n this.setState((state) => ({\n showIncrements: !state.showIncrements,\n }))\n },\n\n resetOrder: async () => {\n this.setState(() => ({\n resetOrderTransaction: {\n status: `info`,\n title: `Reordering started...`,\n closable: true,\n },\n }))\n\n const update = await resetOrder(this.props.options.type, this.props.options.client)\n\n const reorderWasSuccessful = update?.results?.length\n\n this.setState(() => ({\n resetOrderTransaction: {\n status: reorderWasSuccessful ? `success` : `info`,\n title: reorderWasSuccessful\n ? `Reordered ${update.results.length === 1 ? `Document` : `Documents`}`\n : `Reordering failed`,\n closable: true,\n },\n }))\n },\n }\n\n render() {\n const type = this?.props?.options?.type\n if (!type) {\n return null\n }\n return (\n <DocumentListWrapper\n filter={this?.props?.options?.filter}\n params={this?.props?.options?.params}\n type={type}\n showIncrements={this.state.showIncrements}\n resetOrderTransaction={this.state.resetOrderTransaction}\n />\n )\n }\n}\n","import {GenerateIcon, SortIcon} from '@sanity/icons'\nimport type {ConfigContext} from 'sanity'\n\nimport {ComponentType} from 'react'\nimport {StructureBuilder, type ListItem, type MenuItem} from 'sanity/desk'\nimport OrderableDocumentList from '../OrderableDocumentList'\n\nexport interface OrderableListConfig {\n type: string\n id?: string\n title?: string\n icon?: ComponentType\n params?: Record<string, unknown>\n filter?: string\n menuItems?: MenuItem[]\n createIntent?: boolean\n context: ConfigContext\n S: StructureBuilder\n}\n\nexport function orderableDocumentListDeskItem(config: OrderableListConfig): ListItem {\n if (!config?.type || !config.context || !config.S) {\n throw new Error(`\n type, context and S (StructureBuilder) must be provided.\n context and S are available when configuring structure.\n Example: orderableDocumentListDeskItem({type: 'category'})\n `)\n }\n\n const {type, filter, menuItems = [], createIntent, params, title, icon, id, context, S} = config\n const {schema, getClient} = context\n const client = getClient({apiVersion: '2021-09-01'})\n\n const listTitle = title ?? `Orderable ${type}`\n const listId = id ?? `orderable-${type}`\n const listIcon = icon ?? SortIcon\n const typeTitle = schema.get(type)?.title ?? type\n\n if (createIntent !== false) {\n menuItems.push(\n S.menuItem()\n .title(`Create new ${typeTitle}`)\n .intent({type: 'create', params: {type}})\n .serialize()\n )\n }\n return S.listItem()\n .title(listTitle)\n .id(listId)\n .icon(listIcon)\n .child(\n Object.assign(S.documentTypeList(type).serialize(), {\n // Prevents the component from re-rendering when switching documents\n __preserveInstance: true,\n // Prevents the component from NOT re-rendering when switching listItems\n key: listId,\n\n type: 'component',\n component: OrderableDocumentList,\n options: {type, filter, params, client},\n menuItems: [\n ...menuItems,\n S.menuItem().title(`Reset Order`).icon(GenerateIcon).action(`resetOrder`).serialize(),\n S.menuItem()\n .title(`Toggle Increments`)\n .icon(SortIcon)\n .action(`showIncrements`)\n .serialize(),\n ],\n })\n )\n .serialize()\n}\n"],"names":["ORDER_FIELD_NAME","initialRank","lastRankValue","lastRank","LexoRank","parse","min","nextRank","genNext","toString","orderRankField","config","type","Error","defineField","title","readOnly","hidden","name","initialValue","p","_ref","getClient","lastDocOrderRank","apiVersion","fetch","order","orderRankOrdering","by","field","direction","OrderableContext","React","createContext","Document","_ref2","doc","increment","entities","index","isFirst","isLast","dragBadge","_a","_b","showIncrements","useContext","schema","useSchema","router","usePaneRouter","ChildLink","groupIndex","routerPanesState","currentDoc","id","pressed","_id","replace","selected","length","Link","useMemo","LinkComponent","linkProps","childId","jsx","PreviewCard","__unstable_focusRing","as","radius","sizing","tabIndex","tone","width","flex","children","jsxs","Flex","align","Box","paddingX","style","flexShrink","Text","size","DragHandleIcon","cursor","gap","paddingRight","Button","padding","mode","onClick","disabled","icon","ChevronUpIcon","ChevronDownIcon","Preview","layout","value","schemaType","get","_type","Card","marginRight","AvatarCounter","count","lexicographicalSort","a","b","reorderDocuments","_ref3","selectedIds","source","destination","startIndex","endIndex","isMovingUp","selectedItems","filter","item","includes","message","concat","join","all","reduce","acc","cur","curIndex","_c","_d","prevIndex","prevRank","curRank","nextIndex","max","betweenRank","between","selectedIndex","patches","flatMap","docPatches","set","startsWith","hasPublished","push","allSorted","sort","newOrder","useSanityClient","useClient","getItemStyle","draggableStyle","itemIsUpdating","userSelect","transition","opacity","pointerEvents","cardTone","settings","isDuplicate","isGhosting","isDragging","isSelected","DraggableList","_ref4","data","listIsUpdating","setListIsUpdating","toast","useToast","orderedData","setOrderedData","useState","useEffect","draggingId","setDraggingId","setSelectedIds","clearSelected","useCallback","handleSelect","clickedId","nativeEvent","selectMultiple","shiftKey","isUsingWindows","navigator","appVersion","indexOf","selectAdditional","ctrlKey","metaKey","updatedIds","preventDefault","lastSelectedId","lastSelectedIndex","findIndex","firstSelected","lastSelected","betweenIds","itemIndex","map","client","transactPatches","transaction","forEach","_ref5","docId","ops","patch","commit","then","updated","results","status","description","catch","handleDragEnd","result","draggableId","effectedIds","handleDragStart","start","incrementIndex","shiftFrom","shiftTo","onWindowKeyDown","event","key","window","addEventListener","removeEventListener","duplicateOrders","orderField","onDragEnd","DragDropContext","onDragStart","Droppable","droppableId","provided","droppableProps","ref","innerRef","Draggable","innerProvided","innerSnapshot","Boolean","isUpdating","isDisabled","selectedCount","draggableProps","dragHandleProps","paddingBottom","shadow","e","placeholder","DEFAULT_PARAMS","DocumentListQuery","_ref6","params","setData","query","queryParams","queryData","loading","error","useListeningQuery","filteredDocuments","alsoHasDraft","some","unorderedDataCount","height","justify","Spinner","Feedback","Container","paddingY","muted","Stack","space","overflow","marginBottom","Fragment","DocumentListWrapper","_ref7","resetOrderTransaction","schemaIsInvalid","typeSchema","fields","Provider","resetOrder","arguments","undefined","documents","aLexoRank","update","err","OrderableDocumentList","Component","constructor","props","__publicField","setState","state","closable","options","reorderWasSuccessful","render","_e","_f","orderableDocumentListDeskItem","context","S","menuItems","createIntent","listTitle","listId","listIcon","SortIcon","typeTitle","menuItem","intent","serialize","listItem","child","Object","assign","documentTypeList","__preserveInstance","component","GenerateIcon","action"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/orderable-document-list",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Drag-and-drop Document Ordering without leaving the Editing surface",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"@commitlint/config-conventional": "^17.6.6",
|
|
69
69
|
"@sanity/pkg-utils": "^2.3.3",
|
|
70
70
|
"@sanity/plugin-kit": "^3.1.7",
|
|
71
|
-
"@sanity/semantic-release-preset": "^4.1.
|
|
71
|
+
"@sanity/semantic-release-preset": "^4.1.6",
|
|
72
72
|
"@types/react": "^18.2.14",
|
|
73
73
|
"@typescript-eslint/eslint-plugin": "^5.61.0",
|
|
74
74
|
"@typescript-eslint/parser": "^5.61.0",
|
|
@@ -89,14 +89,16 @@
|
|
|
89
89
|
"react-dom": "^18.2.0",
|
|
90
90
|
"react-is": "^18.2.0",
|
|
91
91
|
"rimraf": "^5.0.1",
|
|
92
|
-
"sanity": "^3.
|
|
93
|
-
"semantic-release": "^
|
|
94
|
-
"styled-components": "^5.3.6",
|
|
92
|
+
"sanity": "^3.3.1",
|
|
93
|
+
"semantic-release": "^22.0.6",
|
|
95
94
|
"typescript": "^5.1.6"
|
|
96
95
|
},
|
|
97
96
|
"peerDependencies": {
|
|
97
|
+
"@sanity/ui": "^1.0 || ^2.0",
|
|
98
98
|
"react": "^18",
|
|
99
|
-
"
|
|
99
|
+
"react-dom": "^18",
|
|
100
|
+
"sanity": "^3.0.0",
|
|
101
|
+
"styled-components": "^5.0 || ^6.0"
|
|
100
102
|
},
|
|
101
103
|
"engines": {
|
|
102
104
|
"node": ">=14"
|
package/src/Document.tsx
CHANGED
|
@@ -65,7 +65,7 @@ export default function Document({
|
|
|
65
65
|
flex={1}
|
|
66
66
|
>
|
|
67
67
|
<Flex align="center">
|
|
68
|
-
<Box paddingX={
|
|
68
|
+
<Box paddingX={2} style={{flexShrink: 0}}>
|
|
69
69
|
<Text size={2}>
|
|
70
70
|
<DragHandleIcon cursor="grab" />
|
|
71
71
|
</Text>
|
|
@@ -90,7 +90,7 @@ export default function Document({
|
|
|
90
90
|
/>
|
|
91
91
|
</Flex>
|
|
92
92
|
)}
|
|
93
|
-
<Box style={{width: `100%`}}
|
|
93
|
+
<Box style={{width: `100%`}}>
|
|
94
94
|
<Flex flex={1} align="center">
|
|
95
95
|
<Preview
|
|
96
96
|
layout="default"
|
|
@@ -2,7 +2,7 @@ import {GenerateIcon, SortIcon} from '@sanity/icons'
|
|
|
2
2
|
import type {ConfigContext} from 'sanity'
|
|
3
3
|
|
|
4
4
|
import {ComponentType} from 'react'
|
|
5
|
-
import {StructureBuilder, type ListItem} from 'sanity/desk'
|
|
5
|
+
import {StructureBuilder, type ListItem, type MenuItem} from 'sanity/desk'
|
|
6
6
|
import OrderableDocumentList from '../OrderableDocumentList'
|
|
7
7
|
|
|
8
8
|
export interface OrderableListConfig {
|
|
@@ -12,6 +12,8 @@ export interface OrderableListConfig {
|
|
|
12
12
|
icon?: ComponentType
|
|
13
13
|
params?: Record<string, unknown>
|
|
14
14
|
filter?: string
|
|
15
|
+
menuItems?: MenuItem[]
|
|
16
|
+
createIntent?: boolean
|
|
15
17
|
context: ConfigContext
|
|
16
18
|
S: StructureBuilder
|
|
17
19
|
}
|
|
@@ -25,7 +27,7 @@ export function orderableDocumentListDeskItem(config: OrderableListConfig): List
|
|
|
25
27
|
`)
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
const {type, filter, params, title, icon, id, context, S} = config
|
|
30
|
+
const {type, filter, menuItems = [], createIntent, params, title, icon, id, context, S} = config
|
|
29
31
|
const {schema, getClient} = context
|
|
30
32
|
const client = getClient({apiVersion: '2021-09-01'})
|
|
31
33
|
|
|
@@ -34,6 +36,14 @@ export function orderableDocumentListDeskItem(config: OrderableListConfig): List
|
|
|
34
36
|
const listIcon = icon ?? SortIcon
|
|
35
37
|
const typeTitle = schema.get(type)?.title ?? type
|
|
36
38
|
|
|
39
|
+
if (createIntent !== false) {
|
|
40
|
+
menuItems.push(
|
|
41
|
+
S.menuItem()
|
|
42
|
+
.title(`Create new ${typeTitle}`)
|
|
43
|
+
.intent({type: 'create', params: {type}})
|
|
44
|
+
.serialize()
|
|
45
|
+
)
|
|
46
|
+
}
|
|
37
47
|
return S.listItem()
|
|
38
48
|
.title(listTitle)
|
|
39
49
|
.id(listId)
|
|
@@ -49,10 +59,7 @@ export function orderableDocumentListDeskItem(config: OrderableListConfig): List
|
|
|
49
59
|
component: OrderableDocumentList,
|
|
50
60
|
options: {type, filter, params, client},
|
|
51
61
|
menuItems: [
|
|
52
|
-
|
|
53
|
-
.title(`Create new ${typeTitle}`)
|
|
54
|
-
.intent({type: 'create', params: {type}})
|
|
55
|
-
.serialize(),
|
|
62
|
+
...menuItems,
|
|
56
63
|
S.menuItem().title(`Reset Order`).icon(GenerateIcon).action(`resetOrder`).serialize(),
|
|
57
64
|
S.menuItem()
|
|
58
65
|
.title(`Toggle Increments`)
|