@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.
- package/lib/DraggableList.js +1 -1
- package/lib/DraggableList.js.map +1 -1
- package/package.json +1 -1
- package/src/DraggableList.js +1 -1
package/lib/DraggableList.js
CHANGED
|
@@ -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 =
|
|
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({
|
package/lib/DraggableList.js.map
CHANGED
|
@@ -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
package/src/DraggableList.js
CHANGED
|
@@ -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 =
|
|
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})
|