@sanity/orderable-document-list 0.0.6 → 0.0.7

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.
@@ -269,7 +269,7 @@ function DraggableList(_ref) {
269
269
  var isSelected = selectedIds.includes(item._id);
270
270
  var isDragging = innerSnapshot.isDragging;
271
271
  var isGhosting = Boolean(!isDragging && draggingId && isSelected);
272
- var isUpdating = isUpdating && isSelected;
272
+ var isUpdating = listIsUpdating && isSelected;
273
273
  var isDisabled = Boolean(!item[_constants.ORDER_FIELD_NAME]);
274
274
  var isDuplicate = duplicateOrders.includes(item[_constants.ORDER_FIELD_NAME]);
275
275
  var tone = cardTone({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DraggableList.js"],"names":["client","sanityClient","withConfig","apiVersion","getItemStyle","draggableStyle","itemIsUpdating","userSelect","transition","opacity","pointerEvents","undefined","cardTone","settings","isDuplicate","isGhosting","isDragging","isSelected","DraggableList","data","type","listIsUpdating","setListIsUpdating","toast","router","navigateIntent","orderedData","setOrderedData","draggingId","setDraggingId","selectedIds","setSelectedIds","clearSelected","handleSelect","clickedId","index","nativeEvent","includes","selectMultiple","shiftKey","isUsingWindows","navigator","appVersion","indexOf","selectAdditional","ctrlKey","metaKey","updatedIds","id","lastSelectedId","at","lastSelectedIndex","findIndex","item","_id","firstSelected","lastSelected","betweenIds","filter","itemIndex","map","transactPatches","patches","message","transaction","forEach","patchArgs","patch","commit","then","updated","push","title","results","length","status","description","catch","handleDragEnd","result","entities","source","destination","draggableId","effectedIds","newOrder","handleDragStart","start","selected","incrementIndex","shiftFrom","shiftTo","onWindowKeyDown","event","key","window","addEventListener","removeEventListener","duplicateOrders","orderField","ORDER_FIELD_NAME","provided","snapshot","droppableProps","innerRef","innerProvided","innerSnapshot","Boolean","isUpdating","isDisabled","tone","draggableProps","dragHandleProps","style","placeholder","propTypes","PropTypes","arrayOf","shape","string","isRequired","bool","func"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types'\nimport React, {useMemo, useState, useEffect} from 'react'\nimport {DragDropContext, Droppable, Draggable} from 'react-beautiful-dnd'\nimport {usePaneRouter} from '@sanity/desk-tool'\nimport {Box, Card, useToast} from '@sanity/ui'\nimport sanityClient from 'part:@sanity/base/client'\n\nimport Document from './Document'\nimport {reorderDocuments} from './helpers/reorderDocuments'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\n\nconst client = sanityClient.withConfig({\n apiVersion: '2021-09-01',\n})\n\nconst getItemStyle = (draggableStyle, itemIsUpdating) => ({\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) => {\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({data, type, listIsUpdating, setListIsUpdating}) {\n const toast = useToast()\n const router = usePaneRouter()\n const {navigateIntent} = router\n\n // Maintains local state order before transaction completes\n const [orderedData, setOrderedData] = useState(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([])\n\n const clearSelected = () => setSelectedIds([])\n\n const handleSelect = (clickedId, index, nativeEvent) => {\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 navigateIntent('edit', {id: clickedId, type})\n return setSelectedIds([clickedId])\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.at(-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\n const transactPatches = async (patches, message) => {\n const transaction = client.transaction()\n\n patches.forEach((patchArgs) => transaction.patch(...patchArgs))\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: `critical`,\n })\n })\n }\n\n const handleDragEnd = (result, entities) => {\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) 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\n const handleDragStart = (start) => {\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\n // Move one document up or down one place, by fake invoking the drag function\n const incrementIndex = (shiftFrom, shiftTo, id, entities) => {\n const result = {\n draggableId: id,\n source: {index: shiftFrom},\n destination: {index: shiftTo},\n }\n\n return handleDragEnd(result, entities)\n }\n\n const onWindowKeyDown = (event) => {\n if (event.key === 'Escape') {\n clearSelected()\n }\n }\n\n useEffect(() => {\n window.addEventListener('keydown', onWindowKeyDown)\n\n return () => {\n window.removeEventListener('keydown', onWindowKeyDown)\n }\n }, [])\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 return (\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={(result) => handleDragEnd(result, orderedData)}\n >\n <Droppable droppableId=\"documentSortZone\">\n {(provided, snapshot) => (\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 = isUpdating && 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\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, isGhosting)\n }\n >\n <Box paddingBottom={1}>\n <Card tone={tone} shadow={isDragging ? `2` : undefined} radius={2}>\n <Document\n doc={item}\n entities={orderedData}\n handleSelect={handleSelect}\n increment={incrementIndex}\n index={index}\n isFirst={index === 0}\n isLast={index === orderedData.length - 1}\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\nDraggableList.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n _id: PropTypes.string,\n }).isRequired\n ).isRequired,\n type: PropTypes.string.isRequired,\n listIsUpdating: PropTypes.bool.isRequired,\n setListIsUpdating: PropTypes.func.isRequired,\n}\n"],"file":"DraggableList.js"}
1
+ {"version":3,"sources":["../src/DraggableList.js"],"names":["client","sanityClient","withConfig","apiVersion","getItemStyle","draggableStyle","itemIsUpdating","userSelect","transition","opacity","pointerEvents","undefined","cardTone","settings","isDuplicate","isGhosting","isDragging","isSelected","DraggableList","data","type","listIsUpdating","setListIsUpdating","toast","router","navigateIntent","orderedData","setOrderedData","draggingId","setDraggingId","selectedIds","setSelectedIds","clearSelected","handleSelect","clickedId","index","nativeEvent","includes","selectMultiple","shiftKey","isUsingWindows","navigator","appVersion","indexOf","selectAdditional","ctrlKey","metaKey","updatedIds","id","lastSelectedId","at","lastSelectedIndex","findIndex","item","_id","firstSelected","lastSelected","betweenIds","filter","itemIndex","map","transactPatches","patches","message","transaction","forEach","patchArgs","patch","commit","then","updated","push","title","results","length","status","description","catch","handleDragEnd","result","entities","source","destination","draggableId","effectedIds","newOrder","handleDragStart","start","selected","incrementIndex","shiftFrom","shiftTo","onWindowKeyDown","event","key","window","addEventListener","removeEventListener","duplicateOrders","orderField","ORDER_FIELD_NAME","provided","snapshot","droppableProps","innerRef","innerProvided","innerSnapshot","Boolean","isUpdating","isDisabled","tone","draggableProps","dragHandleProps","style","placeholder","propTypes","PropTypes","arrayOf","shape","string","isRequired","bool","func"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types'\nimport React, {useMemo, useState, useEffect} from 'react'\nimport {DragDropContext, Droppable, Draggable} from 'react-beautiful-dnd'\nimport {usePaneRouter} from '@sanity/desk-tool'\nimport {Box, Card, useToast} from '@sanity/ui'\nimport sanityClient from 'part:@sanity/base/client'\n\nimport Document from './Document'\nimport {reorderDocuments} from './helpers/reorderDocuments'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\n\nconst client = sanityClient.withConfig({\n apiVersion: '2021-09-01',\n})\n\nconst getItemStyle = (draggableStyle, itemIsUpdating) => ({\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) => {\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({data, type, listIsUpdating, setListIsUpdating}) {\n const toast = useToast()\n const router = usePaneRouter()\n const {navigateIntent} = router\n\n // Maintains local state order before transaction completes\n const [orderedData, setOrderedData] = useState(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([])\n\n const clearSelected = () => setSelectedIds([])\n\n const handleSelect = (clickedId, index, nativeEvent) => {\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 navigateIntent('edit', {id: clickedId, type})\n return setSelectedIds([clickedId])\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.at(-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\n const transactPatches = async (patches, message) => {\n const transaction = client.transaction()\n\n patches.forEach((patchArgs) => transaction.patch(...patchArgs))\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: `critical`,\n })\n })\n }\n\n const handleDragEnd = (result, entities) => {\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) 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\n const handleDragStart = (start) => {\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\n // Move one document up or down one place, by fake invoking the drag function\n const incrementIndex = (shiftFrom, shiftTo, id, entities) => {\n const result = {\n draggableId: id,\n source: {index: shiftFrom},\n destination: {index: shiftTo},\n }\n\n return handleDragEnd(result, entities)\n }\n\n const onWindowKeyDown = (event) => {\n if (event.key === 'Escape') {\n clearSelected()\n }\n }\n\n useEffect(() => {\n window.addEventListener('keydown', onWindowKeyDown)\n\n return () => {\n window.removeEventListener('keydown', onWindowKeyDown)\n }\n }, [])\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 return (\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={(result) => handleDragEnd(result, orderedData)}\n >\n <Droppable droppableId=\"documentSortZone\">\n {(provided, snapshot) => (\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\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, isGhosting)\n }\n >\n <Box paddingBottom={1}>\n <Card tone={tone} shadow={isDragging ? `2` : undefined} radius={2}>\n <Document\n doc={item}\n entities={orderedData}\n handleSelect={handleSelect}\n increment={incrementIndex}\n index={index}\n isFirst={index === 0}\n isLast={index === orderedData.length - 1}\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\nDraggableList.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n _id: PropTypes.string,\n }).isRequired\n ).isRequired,\n type: PropTypes.string.isRequired,\n listIsUpdating: PropTypes.bool.isRequired,\n setListIsUpdating: PropTypes.func.isRequired,\n}\n"],"file":"DraggableList.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/orderable-document-list",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Drag-and-drop Document Ordering without leaving the Editing surface",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -222,7 +222,7 @@ export default function DraggableList({data, type, listIsUpdating, setListIsUpda
222
222
  const isSelected = selectedIds.includes(item._id)
223
223
  const isDragging = innerSnapshot.isDragging
224
224
  const isGhosting = Boolean(!isDragging && draggingId && isSelected)
225
- const isUpdating = isUpdating && isSelected
225
+ const isUpdating = listIsUpdating && isSelected
226
226
  const isDisabled = Boolean(!item[ORDER_FIELD_NAME])
227
227
  const isDuplicate = duplicateOrders.includes(item[ORDER_FIELD_NAME])
228
228
  const tone = cardTone({isDuplicate, isGhosting, isDragging, isSelected})