@sanity/orderable-document-list 0.0.2 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Document.js +13 -13
- package/lib/Document.js.map +1 -1
- package/lib/DocumentListQuery.js +2 -5
- package/lib/DocumentListQuery.js.map +1 -1
- package/lib/DraggableList.js +2 -2
- package/lib/OrderableDocumentList.js +5 -2
- package/lib/OrderableDocumentList.js.map +1 -1
- package/lib/desk-structure/orderableDocumentListDeskItem.js +13 -3
- package/lib/desk-structure/orderableDocumentListDeskItem.js.map +1 -1
- package/lib/fields/orderRankField.js +2 -2
- package/lib/helpers/resetOrder.js +7 -2
- package/lib/helpers/resetOrder.js.map +1 -1
- package/package.json +5 -5
- package/src/Document.js +18 -18
- package/src/DocumentListQuery.js +4 -4
- package/src/OrderableDocumentList.js +6 -2
- package/src/desk-structure/orderableDocumentListDeskItem.js +8 -2
- package/src/helpers/resetOrder.js +6 -2
package/lib/Document.js
CHANGED
|
@@ -50,23 +50,13 @@ function Document(_ref) {
|
|
|
50
50
|
}
|
|
51
51
|
}, /*#__PURE__*/_react.default.createElement(_ui.Text, {
|
|
52
52
|
fontSize: 4
|
|
53
|
-
}, /*#__PURE__*/_react.default.createElement(_icons.DragHandleIcon, null))), /*#__PURE__*/_react.default.createElement(_ui.
|
|
54
|
-
style: {
|
|
55
|
-
width: "100%"
|
|
56
|
-
},
|
|
57
|
-
padding: 2,
|
|
58
|
-
mode: "bleed",
|
|
59
|
-
onClick: e => handleSelect(doc._id, index, e.nativeEvent)
|
|
60
|
-
}, /*#__PURE__*/_react.default.createElement(_ui.Flex, {
|
|
61
|
-
flex: 1,
|
|
62
|
-
align: "center"
|
|
63
|
-
}, showIncrements && /*#__PURE__*/_react.default.createElement(_ui.Flex, {
|
|
53
|
+
}, /*#__PURE__*/_react.default.createElement(_icons.DragHandleIcon, null))), showIncrements && /*#__PURE__*/_react.default.createElement(_ui.Flex, {
|
|
64
54
|
style: {
|
|
65
55
|
flexShrink: 0
|
|
66
56
|
},
|
|
67
57
|
align: "center",
|
|
68
58
|
gap: 1,
|
|
69
|
-
paddingRight:
|
|
59
|
+
paddingRight: 1
|
|
70
60
|
}, /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
71
61
|
padding: 2,
|
|
72
62
|
mode: "ghost",
|
|
@@ -79,7 +69,17 @@ function Document(_ref) {
|
|
|
79
69
|
disabled: isLast,
|
|
80
70
|
onClick: () => increment(index, index + 1, doc._id, entities),
|
|
81
71
|
icon: _icons.ChevronDownIcon
|
|
82
|
-
})), /*#__PURE__*/_react.default.createElement(_ui.
|
|
72
|
+
})), /*#__PURE__*/_react.default.createElement(_ui.Button, {
|
|
73
|
+
style: {
|
|
74
|
+
width: "100%"
|
|
75
|
+
},
|
|
76
|
+
padding: 2,
|
|
77
|
+
mode: "bleed",
|
|
78
|
+
onClick: e => handleSelect(doc._id, index, e.nativeEvent)
|
|
79
|
+
}, /*#__PURE__*/_react.default.createElement(_ui.Flex, {
|
|
80
|
+
flex: 1,
|
|
81
|
+
align: "center"
|
|
82
|
+
}, /*#__PURE__*/_react.default.createElement(_ui.Box, {
|
|
83
83
|
flex: 1
|
|
84
84
|
}, /*#__PURE__*/_react.default.createElement(_preview.default, {
|
|
85
85
|
value: doc,
|
package/lib/Document.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Document.js"],"names":["Document","doc","increment","entities","handleSelect","index","isFirst","isLast","OrderableContext","showIncrements","flexShrink","
|
|
1
|
+
{"version":3,"sources":["../src/Document.js"],"names":["Document","doc","increment","entities","handleSelect","index","isFirst","isLast","OrderableContext","showIncrements","flexShrink","_id","ChevronUpIcon","ChevronDownIcon","width","e","nativeEvent","schema","get","_type","startsWith","propTypes","PropTypes","shape","string","isRequired","arrayOf","func","number","bool","ChildEditLink","id","children","router","ChildLink","routerPanesState","isOpen","some","pane","replace","Link","linkProps","node"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types'\n// eslint-disable-next-line no-unused-vars\nimport React, {useCallback, useContext, useMemo} from 'react'\nimport {\n DragHandleIcon,\n ChevronUpIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n EditIcon,\n} from '@sanity/icons'\nimport {Text, Flex, Box, Button} from '@sanity/ui'\nimport {usePaneRouter} from '@sanity/desk-tool'\nimport Preview from 'part:@sanity/base/preview'\nimport schema from 'part:@sanity/base/schema'\n\nimport {OrderableContext} from './OrderableContext'\n\nexport default function Document({doc, increment, entities, handleSelect, index, isFirst, isLast}) {\n const {showIncrements} = useContext(OrderableContext)\n\n return (\n <Flex align=\"center\">\n <Box paddingX={3} style={{flexShrink: 0}}>\n <Text fontSize={4}>\n <DragHandleIcon />\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 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 onClick={() => increment(index, index + 1, doc._id, entities)}\n icon={ChevronDownIcon}\n />\n </Flex>\n )}\n <Button\n style={{width: `100%`}}\n padding={2}\n mode=\"bleed\"\n onClick={(e) => handleSelect(doc._id, index, e.nativeEvent)}\n >\n <Flex flex={1} align=\"center\">\n <Box flex={1}>\n <Preview value={doc} type={schema.get(doc._type)} />\n </Box>\n </Flex>\n </Button>\n <Box paddingX={3} style={{flexShrink: 0}}>\n <ChildEditLink id={doc._id}>\n <Text fontSize={4}>\n {doc._id.startsWith(`drafts.`) ? <EditIcon /> : <ChevronRightIcon />}\n </Text>\n </ChildEditLink>\n </Box>\n </Flex>\n )\n}\n\nDocument.propTypes = {\n doc: PropTypes.shape({\n _id: PropTypes.string,\n _type: PropTypes.string,\n }).isRequired,\n entities: PropTypes.arrayOf(\n PropTypes.shape({\n _id: PropTypes.string,\n }).isRequired\n ).isRequired,\n handleSelect: PropTypes.func.isRequired,\n increment: PropTypes.func.isRequired,\n index: PropTypes.number.isRequired,\n isFirst: PropTypes.bool.isRequired,\n isLast: PropTypes.bool.isRequired,\n}\n\nconst ChildEditLink = ({id, children}) => {\n const router = usePaneRouter()\n const {ChildLink, routerPanesState} = router\n\n // Is this document currently being edited\n const isOpen = useMemo(\n () => routerPanesState.some((pane) => pane[0]?.id === id.replace(`drafts.`, ``)),\n [id, routerPanesState]\n )\n\n const Link = useCallback(\n (linkProps) => <ChildLink {...linkProps} childId={id.replace(`drafts.`, ``)} />,\n [ChildLink, id]\n )\n\n return (\n <Button\n as={Link}\n mode={isOpen ? `default` : `ghost`}\n tone={isOpen ? `primary` : `transparent`}\n padding={2}\n >\n {children}\n </Button>\n )\n}\n\nChildEditLink.propTypes = {\n id: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired,\n}\n"],"file":"Document.js"}
|
package/lib/DocumentListQuery.js
CHANGED
|
@@ -13,8 +13,6 @@ var _client = _interopRequireDefault(require("part:@sanity/base/client"));
|
|
|
13
13
|
|
|
14
14
|
var _ui = require("@sanity/ui");
|
|
15
15
|
|
|
16
|
-
var _deskTool = require("@sanity/desk-tool");
|
|
17
|
-
|
|
18
16
|
var _DraggableList = _interopRequireDefault(require("./DraggableList"));
|
|
19
17
|
|
|
20
18
|
var _constants = require("./helpers/constants");
|
|
@@ -65,9 +63,8 @@ function DocumentListQuery(_ref) {
|
|
|
65
63
|
data = _useState6[0],
|
|
66
64
|
setData = _useState6[1];
|
|
67
65
|
|
|
68
|
-
var router = (0, _deskTool.usePaneRouter)();
|
|
69
66
|
(0, _react.useEffect)(() => {
|
|
70
|
-
var query = "*[_type == $type]|order(@[$order] asc)";
|
|
67
|
+
var query = "*[_type == $type]|order(@[$order] asc){\n _id, _type, ".concat(_constants.ORDER_FIELD_NAME, "\n }");
|
|
71
68
|
var queryParams = {
|
|
72
69
|
type,
|
|
73
70
|
order: _constants.ORDER_FIELD_NAME
|
|
@@ -126,7 +123,7 @@ function DocumentListQuery(_ref) {
|
|
|
126
123
|
return (_subscription = subscription) === null || _subscription === void 0 ? void 0 : _subscription.unsubscribe();
|
|
127
124
|
};
|
|
128
125
|
/* eslint-disable-next-line react-hooks/exhaustive-deps */
|
|
129
|
-
}, []);
|
|
126
|
+
}, [type]);
|
|
130
127
|
var unorderedDataCount = (0, _react.useMemo)(() => data.length ? data.filter(doc => !doc[_constants.ORDER_FIELD_NAME]).length : 0, [data]);
|
|
131
128
|
if (isLoading) return /*#__PURE__*/_react.default.createElement(_ui.Flex, {
|
|
132
129
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DocumentListQuery.js"],"names":["client","sanityClient","withConfig","apiVersion","DocumentListQuery","type","isLoading","setIsLoading","isUpdating","setIsUpdating","data","setData","
|
|
1
|
+
{"version":3,"sources":["../src/DocumentListQuery.js"],"names":["client","sanityClient","withConfig","apiVersion","DocumentListQuery","type","isLoading","setIsLoading","isUpdating","setIsUpdating","data","setData","query","ORDER_FIELD_NAME","queryParams","order","subscription","fetchData","fetch","then","documents","filteredDocuments","reduce","acc","cur","_id","startsWith","alsoHasDraft","some","doc","prepareData","listen","subscribe","length","unsubscribe","unorderedDataCount","filter","width","height","overflow","propTypes","PropTypes","string","isRequired"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types'\nimport React, {useEffect, useState, useMemo} from 'react'\nimport sanityClient from 'part:@sanity/base/client'\nimport {Stack, Box, Flex, Spinner} from '@sanity/ui'\n\nimport DraggableList from './DraggableList'\nimport {ORDER_FIELD_NAME} from './helpers/constants'\nimport Feedback from './Feedback'\n\nconst client = sanityClient.withConfig({\n apiVersion: '2021-09-01',\n})\n\nexport default function DocumentListQuery({type}) {\n const [isLoading, setIsLoading] = useState(true)\n const [isUpdating, setIsUpdating] = useState(false)\n const [data, setData] = useState([])\n\n useEffect(() => {\n const query = `*[_type == $type]|order(@[$order] asc){\n _id, _type, ${ORDER_FIELD_NAME}\n }`\n const queryParams = {type, order: ORDER_FIELD_NAME}\n let subscription = null\n\n // eslint-disable-next-line require-await\n const fetchData = async () => {\n client.fetch(query, queryParams).then((documents) => {\n // Remove published document from list if draft also exists\n const filteredDocuments = documents.reduce((acc, cur) => {\n if (!cur._id.startsWith(`drafts.`)) {\n // eslint-disable-next-line max-nested-callbacks\n const alsoHasDraft = documents.some((doc) => doc._id === `drafts.${cur._id}`)\n\n return alsoHasDraft ? acc : [...acc, cur]\n }\n\n return [...acc, cur]\n }, [])\n\n setData(filteredDocuments)\n\n if (isLoading) {\n setIsLoading(false)\n }\n })\n }\n\n const prepareData = async () => {\n setIsLoading(true)\n\n await fetchData()\n\n if (!subscription) {\n subscription = client.listen(query, queryParams).subscribe(() => fetchData())\n }\n }\n\n // Get data but only if a document isn't being patched or we don't yet have data\n if (!isUpdating && !data.length) {\n prepareData()\n }\n\n return () => subscription?.unsubscribe()\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, [type])\n\n const unorderedDataCount = useMemo(\n () => (data.length ? data.filter((doc) => !doc[ORDER_FIELD_NAME]).length : 0),\n [data]\n )\n\n if (isLoading)\n return (\n <Flex style={{width: `100%`, height: `100%`}} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )\n\n return (\n <Stack space={1} style={{overflow: `scroll`, height: `100%`}}>\n {unorderedDataCount > 0 && (\n <Feedback>\n {unorderedDataCount}/{data.length} Documents have no Order. Select{' '}\n <strong>Reset Order</strong> from the Menu above to fix.\n </Feedback>\n )}\n <Box padding={1}>\n <DraggableList data={data} isUpdating={isUpdating} setIsUpdating={setIsUpdating} />\n </Box>\n </Stack>\n )\n}\n\nDocumentListQuery.propTypes = {\n type: PropTypes.string.isRequired,\n}\n"],"file":"DocumentListQuery.js"}
|
package/lib/DraggableList.js
CHANGED
|
@@ -45,9 +45,9 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
45
45
|
|
|
46
46
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
47
47
|
|
|
48
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
48
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
49
49
|
|
|
50
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
50
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
51
51
|
|
|
52
52
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
53
53
|
|
|
@@ -41,6 +41,8 @@ class OrderableDocumentList extends _react.Component {
|
|
|
41
41
|
},
|
|
42
42
|
resetOrder: function () {
|
|
43
43
|
var _resetOrder2 = _asyncToGenerator(function* () {
|
|
44
|
+
var _update$results;
|
|
45
|
+
|
|
44
46
|
_this.setState(() => ({
|
|
45
47
|
resetOrderTransaction: {
|
|
46
48
|
status: "info",
|
|
@@ -50,11 +52,12 @@ class OrderableDocumentList extends _react.Component {
|
|
|
50
52
|
}));
|
|
51
53
|
|
|
52
54
|
var update = yield (0, _resetOrder3.resetOrder)(_this.props.options.type);
|
|
55
|
+
var reorderWasSuccessful = update === null || update === void 0 ? void 0 : (_update$results = update.results) === null || _update$results === void 0 ? void 0 : _update$results.length;
|
|
53
56
|
|
|
54
57
|
_this.setState(() => ({
|
|
55
58
|
resetOrderTransaction: {
|
|
56
|
-
status: "success",
|
|
57
|
-
title: "Reordered ".concat(update.results.length
|
|
59
|
+
status: reorderWasSuccessful ? "success" : "info",
|
|
60
|
+
title: reorderWasSuccessful ? "Reordered ".concat(update.results.length === 1 ? "Document" : "Documents") : "Reordering failed",
|
|
58
61
|
closable: true
|
|
59
62
|
}
|
|
60
63
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/OrderableDocumentList.js"],"names":["OrderableDocumentList","Component","constructor","props","showIncrements","setState","state","resetOrder","resetOrderTransaction","status","title","closable","update","options","type","results","length","render","PropTypes","shape","string","isRequired"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;AAEA;AACe,MAAMA,qBAAN,SAAoCC,gBAApC,CAA8C;AAO3DC,EAAAA,WAAW,CAACC,KAAD,EAAQ;AAAA;;AACjB,UAAMA,KAAN,CADiB;AAAA;;AAAA,4CAQF;AACfC,MAAAA,cAAc,EAAE,MAAM;AACpB,aAAKC,QAAL,CAAeC,KAAD,KAAY;AACxBF,UAAAA,cAAc,EAAE,CAACE,KAAK,CAACF;AADC,SAAZ,CAAd;AAGD,OALc;AAOfG,MAAAA,UAAU;AAAA,6CAAE,aAAY;AACtB,UAAA,KAAI,CAACF,QAAL,CAAc,OAAO;AACnBG,YAAAA,qBAAqB,EAAE;AACrBC,cAAAA,MAAM,QADe;AAErBC,cAAAA,KAAK,yBAFgB;AAGrBC,cAAAA,QAAQ,EAAE;AAHW;AADJ,WAAP,CAAd;;AAQA,cAAMC,MAAM,SAAS,6BAAW,KAAI,CAACT,KAAL,CAAWU,OAAX,CAAmBC,IAA9B,CAArB;;AAEA,UAAA,KAAI,
|
|
1
|
+
{"version":3,"sources":["../src/OrderableDocumentList.js"],"names":["OrderableDocumentList","Component","constructor","props","showIncrements","setState","state","resetOrder","resetOrderTransaction","status","title","closable","update","options","type","reorderWasSuccessful","results","length","render","PropTypes","shape","string","isRequired"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;AAEA;AACe,MAAMA,qBAAN,SAAoCC,gBAApC,CAA8C;AAO3DC,EAAAA,WAAW,CAACC,KAAD,EAAQ;AAAA;;AACjB,UAAMA,KAAN,CADiB;AAAA;;AAAA,4CAQF;AACfC,MAAAA,cAAc,EAAE,MAAM;AACpB,aAAKC,QAAL,CAAeC,KAAD,KAAY;AACxBF,UAAAA,cAAc,EAAE,CAACE,KAAK,CAACF;AADC,SAAZ,CAAd;AAGD,OALc;AAOfG,MAAAA,UAAU;AAAA,6CAAE,aAAY;AAAA;;AACtB,UAAA,KAAI,CAACF,QAAL,CAAc,OAAO;AACnBG,YAAAA,qBAAqB,EAAE;AACrBC,cAAAA,MAAM,QADe;AAErBC,cAAAA,KAAK,yBAFgB;AAGrBC,cAAAA,QAAQ,EAAE;AAHW;AADJ,WAAP,CAAd;;AAQA,cAAMC,MAAM,SAAS,6BAAW,KAAI,CAACT,KAAL,CAAWU,OAAX,CAAmBC,IAA9B,CAArB;AAEA,cAAMC,oBAAoB,GAAGH,MAAH,aAAGA,MAAH,0CAAGA,MAAM,CAAEI,OAAX,oDAAG,gBAAiBC,MAA9C;;AAEA,UAAA,KAAI,CAACZ,QAAL,CAAc,OAAO;AACnBG,YAAAA,qBAAqB,EAAE;AACrBC,cAAAA,MAAM,EAAEM,oBAAoB,qBADP;AAErBL,cAAAA,KAAK,EAAEK,oBAAoB,uBACVH,MAAM,CAACI,OAAP,CAAeC,MAAf,KAA0B,CAA1B,2BADU,uBAFN;AAKrBN,cAAAA,QAAQ,EAAE;AALW;AADJ,WAAP,CAAd;AASD,SAtBS;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAPK,KARE;;AAEjB,SAAKL,KAAL,GAAa;AACXF,MAAAA,cAAc,EAAE,KADL;AAEXI,MAAAA,qBAAqB,EAAE;AAFZ,KAAb;AAID;;AAkCDU,EAAAA,MAAM,GAAG;AAAA;;AACP,wBACE,6BAAC,4BAAD;AACE,MAAA,IAAI,EAAE,IAAF,aAAE,IAAF,sCAAE,KAAMf,KAAR,uEAAE,YAAaU,OAAf,wDAAE,oBAAsBC,IAD9B;AAEE,MAAA,cAAc,EAAE,KAAKR,KAAL,CAAWF,cAF7B;AAGE,MAAA,qBAAqB,EAAE,KAAKE,KAAL,CAAWE;AAHpC,MADF;AAOD;;AAvD0D;;;;gBAAxCR,qB,eACA;AACjBa,EAAAA,OAAO,EAAEM,mBAAUC,KAAV,CAAgB;AACvBN,IAAAA,IAAI,EAAEK,mBAAUE;AADO,GAAhB,EAENC;AAHc,C","sourcesContent":["import PropTypes from 'prop-types'\nimport React, {Component} from 'react'\n\nimport DocumentListWrapper from './DocumentListWrapper'\nimport {resetOrder} from './helpers/resetOrder'\n\n// Must use a Class Component here so the actionHandlers can be called\nexport default class OrderableDocumentList extends Component {\n static propTypes = {\n options: PropTypes.shape({\n type: PropTypes.string,\n }).isRequired,\n }\n\n constructor(props) {\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)\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 return (\n <DocumentListWrapper\n type={this?.props?.options?.type}\n showIncrements={this.state.showIncrements}\n resetOrderTransaction={this.state.resetOrderTransaction}\n />\n )\n }\n}\n"],"file":"OrderableDocumentList.js"}
|
|
@@ -9,11 +9,15 @@ var _structureBuilder = _interopRequireDefault(require("@sanity/desk-tool/struct
|
|
|
9
9
|
|
|
10
10
|
var _icons = require("@sanity/icons");
|
|
11
11
|
|
|
12
|
+
var _schema = _interopRequireDefault(require("part:@sanity/base/schema"));
|
|
13
|
+
|
|
12
14
|
var _OrderableDocumentList = _interopRequireDefault(require("../OrderableDocumentList"));
|
|
13
15
|
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
17
|
|
|
16
18
|
function orderableDocumentListDeskItem() {
|
|
19
|
+
var _schema$get$title, _schema$get;
|
|
20
|
+
|
|
17
21
|
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
18
22
|
|
|
19
23
|
if (!(config !== null && config !== void 0 && config.type)) {
|
|
@@ -26,14 +30,20 @@ function orderableDocumentListDeskItem() {
|
|
|
26
30
|
var listTitle = title !== null && title !== void 0 ? title : "Orderable ".concat(type);
|
|
27
31
|
var listId = "orderable-".concat(type);
|
|
28
32
|
var listIcon = icon !== null && icon !== void 0 ? icon : _icons.SortIcon;
|
|
29
|
-
|
|
30
|
-
Object.assign(_structureBuilder.default.documentTypeList(type).serialize(), {
|
|
33
|
+
var typeTitle = (_schema$get$title = (_schema$get = _schema.default.get(type)) === null || _schema$get === void 0 ? void 0 : _schema$get.title) !== null && _schema$get$title !== void 0 ? _schema$get$title : type;
|
|
34
|
+
return _structureBuilder.default.listItem(type).title(listTitle).id(listId).icon(listIcon).child(Object.assign(_structureBuilder.default.documentTypeList(type).serialize(), {
|
|
35
|
+
__preserveInstance: true,
|
|
31
36
|
type: 'component',
|
|
32
37
|
component: _OrderableDocumentList.default,
|
|
33
38
|
options: {
|
|
34
39
|
type
|
|
35
40
|
},
|
|
36
|
-
menuItems: [
|
|
41
|
+
menuItems: [_structureBuilder.default.menuItem().title("Create new ".concat(typeTitle)).intent({
|
|
42
|
+
type: 'create',
|
|
43
|
+
params: {
|
|
44
|
+
type
|
|
45
|
+
}
|
|
46
|
+
}).serialize(), _structureBuilder.default.menuItem().title("Reset Order").icon(_icons.GenerateIcon).action("resetOrder").serialize(), _structureBuilder.default.menuItem().title("Show Increments").icon(_icons.SortIcon).action("showIncrements").serialize()]
|
|
37
47
|
})).serialize();
|
|
38
48
|
}
|
|
39
49
|
//# sourceMappingURL=orderableDocumentListDeskItem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/desk-structure/orderableDocumentListDeskItem.js"],"names":["orderableDocumentListDeskItem","config","type","Error","title","icon","listTitle","listId","listIcon","SortIcon","S","listItem","id","child","Object","assign","documentTypeList","serialize","component","OrderableDocumentList","options","menuItems","menuItem","GenerateIcon","action"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAEO,SAASA,6BAAT,GAAoD;AAAA,MAAbC,MAAa,uEAAJ,EAAI;;AACzD,MAAI,EAACA,MAAD,aAACA,MAAD,eAACA,MAAM,CAAEC,IAAT,CAAJ,EAAmB;AACjB,UAAM,IAAIC,KAAJ,2JAAN;AAKD;;AAED,MAAOD,IAAP,GAA4BD,MAA5B,CAAOC,IAAP;AAAA,MAAaE,KAAb,GAA4BH,MAA5B,CAAaG,KAAb;AAAA,MAAoBC,IAApB,GAA4BJ,MAA5B,CAAoBI,IAApB;AAEA,MAAMC,SAAS,GAAGF,KAAH,aAAGA,KAAH,cAAGA,KAAH,uBAAyBF,IAAzB,CAAf;AACA,MAAMK,MAAM,uBAAgBL,IAAhB,CAAZ;AACA,MAAMM,QAAQ,GAAGH,IAAH,aAAGA,IAAH,cAAGA,IAAH,GAAWI,eAAzB;AAEA,
|
|
1
|
+
{"version":3,"sources":["../../src/desk-structure/orderableDocumentListDeskItem.js"],"names":["orderableDocumentListDeskItem","config","type","Error","title","icon","listTitle","listId","listIcon","SortIcon","typeTitle","schema","get","S","listItem","id","child","Object","assign","documentTypeList","serialize","__preserveInstance","component","OrderableDocumentList","options","menuItems","menuItem","intent","params","GenerateIcon","action"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAEA;;;;AAEO,SAASA,6BAAT,GAAoD;AAAA;;AAAA,MAAbC,MAAa,uEAAJ,EAAI;;AACzD,MAAI,EAACA,MAAD,aAACA,MAAD,eAACA,MAAM,CAAEC,IAAT,CAAJ,EAAmB;AACjB,UAAM,IAAIC,KAAJ,2JAAN;AAKD;;AAED,MAAOD,IAAP,GAA4BD,MAA5B,CAAOC,IAAP;AAAA,MAAaE,KAAb,GAA4BH,MAA5B,CAAaG,KAAb;AAAA,MAAoBC,IAApB,GAA4BJ,MAA5B,CAAoBI,IAApB;AAEA,MAAMC,SAAS,GAAGF,KAAH,aAAGA,KAAH,cAAGA,KAAH,uBAAyBF,IAAzB,CAAf;AACA,MAAMK,MAAM,uBAAgBL,IAAhB,CAAZ;AACA,MAAMM,QAAQ,GAAGH,IAAH,aAAGA,IAAH,cAAGA,IAAH,GAAWI,eAAzB;AACA,MAAMC,SAAS,uCAAGC,gBAAOC,GAAP,CAAWV,IAAX,CAAH,gDAAG,YAAkBE,KAArB,iEAA8BF,IAA7C;AAEA,SAAOW,0BAAEC,QAAF,CAAWZ,IAAX,EACJE,KADI,CACEE,SADF,EAEJS,EAFI,CAEDR,MAFC,EAGJF,IAHI,CAGCG,QAHD,EAIJQ,KAJI,CAKHC,MAAM,CAACC,MAAP,CAAcL,0BAAEM,gBAAF,CAAmBjB,IAAnB,EAAyBkB,SAAzB,EAAd,EAAoD;AAClDC,IAAAA,kBAAkB,EAAE,IAD8B;AAElDnB,IAAAA,IAAI,EAAE,WAF4C;AAGlDoB,IAAAA,SAAS,EAAEC,8BAHuC;AAIlDC,IAAAA,OAAO,EAAE;AAACtB,MAAAA;AAAD,KAJyC;AAKlDuB,IAAAA,SAAS,EAAE,CACTZ,0BAAEa,QAAF,GACGtB,KADH,sBACuBM,SADvB,GAEGiB,MAFH,CAEU;AAACzB,MAAAA,IAAI,EAAE,QAAP;AAAiB0B,MAAAA,MAAM,EAAE;AAAC1B,QAAAA;AAAD;AAAzB,KAFV,EAGGkB,SAHH,EADS,EAKTP,0BAAEa,QAAF,GAAatB,KAAb,gBAAkCC,IAAlC,CAAuCwB,mBAAvC,EAAqDC,MAArD,eAA0EV,SAA1E,EALS,EAMTP,0BAAEa,QAAF,GAAatB,KAAb,oBAAsCC,IAAtC,CAA2CI,eAA3C,EAAqDqB,MAArD,mBAA8EV,SAA9E,EANS;AALuC,GAApD,CALG,EAoBJA,SApBI,EAAP;AAqBD","sourcesContent":["import S from '@sanity/desk-tool/structure-builder'\nimport {SortIcon, GenerateIcon} from '@sanity/icons'\nimport schema from 'part:@sanity/base/schema'\n\nimport OrderableDocumentList from '../OrderableDocumentList'\n\nexport function orderableDocumentListDeskItem(config = {}) {\n if (!config?.type) {\n throw new Error(`\n \"type\" not defined in orderableDocumentListDeskItem parameters.\n \\n\\n\n Example: orderableDocumentListDeskItem({type: 'category'})\n `)\n }\n\n const {type, title, icon} = config\n\n const listTitle = title ?? `Orderable ${type}`\n const listId = `orderable-${type}`\n const listIcon = icon ?? SortIcon\n const typeTitle = schema.get(type)?.title ?? type\n\n return S.listItem(type)\n .title(listTitle)\n .id(listId)\n .icon(listIcon)\n .child(\n Object.assign(S.documentTypeList(type).serialize(), {\n __preserveInstance: true,\n type: 'component',\n component: OrderableDocumentList,\n options: {type},\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().title(`Show Increments`).icon(SortIcon).action(`showIncrements`).serialize(),\n ],\n })\n )\n .serialize()\n}\n"],"file":"orderableDocumentListDeskItem.js"}
|
|
@@ -17,9 +17,9 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
|
|
|
17
17
|
|
|
18
18
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
19
19
|
|
|
20
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
21
21
|
|
|
22
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
22
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
23
23
|
|
|
24
24
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
25
25
|
|
|
@@ -30,12 +30,17 @@ function resetOrder() {
|
|
|
30
30
|
function _resetOrder() {
|
|
31
31
|
_resetOrder = _asyncToGenerator(function* () {
|
|
32
32
|
var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
33
|
-
var query = "*[_type == $type]|order(@[$order] asc)";
|
|
33
|
+
var query = "*[_type == $type]|order(@[$order] asc)._id";
|
|
34
34
|
var queryParams = {
|
|
35
35
|
type,
|
|
36
36
|
order: _constants.ORDER_FIELD_NAME
|
|
37
37
|
};
|
|
38
38
|
var documents = yield client.fetch(query, queryParams);
|
|
39
|
+
|
|
40
|
+
if (!documents.length) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
39
44
|
var transaction = client.transaction();
|
|
40
45
|
|
|
41
46
|
var aLexoRank = _lexorank.LexoRank.min();
|
|
@@ -43,7 +48,7 @@ function _resetOrder() {
|
|
|
43
48
|
for (var index = 0; index < documents.length; index += 1) {
|
|
44
49
|
// Generate next rank before even the first document so there's room to move!
|
|
45
50
|
aLexoRank = aLexoRank.genNext().genNext();
|
|
46
|
-
transaction.patch(documents[index]
|
|
51
|
+
transaction.patch(documents[index], {
|
|
47
52
|
set: {
|
|
48
53
|
[_constants.ORDER_FIELD_NAME]: aLexoRank.value
|
|
49
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/helpers/resetOrder.js"],"names":["client","sanityClient","withConfig","apiVersion","resetOrder","type","query","queryParams","order","ORDER_FIELD_NAME","documents","fetch","transaction","aLexoRank","LexoRank","min","index","
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/resetOrder.js"],"names":["client","sanityClient","withConfig","apiVersion","resetOrder","type","query","queryParams","order","ORDER_FIELD_NAME","documents","fetch","length","transaction","aLexoRank","LexoRank","min","index","genNext","patch","set","value","commit","then","update","catch","err"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAEA,IAAMA,MAAM,GAAGC,gBAAaC,UAAb,CAAwB;AACrCC,EAAAA,UAAU,EAAE;AADyB,CAAxB,CAAf,C,CAIA;AACA;;;SACsBC,U;;;;;kCAAf,aAAqC;AAAA,QAAXC,IAAW;AAC1C,QAAMC,KAAK,+CAAX;AACA,QAAMC,WAAW,GAAG;AAACF,MAAAA,IAAD;AAAOG,MAAAA,KAAK,EAAEC;AAAd,KAApB;AACA,QAAMC,SAAS,SAASV,MAAM,CAACW,KAAP,CAAaL,KAAb,EAAoBC,WAApB,CAAxB;;AAEA,QAAI,CAACG,SAAS,CAACE,MAAf,EAAuB;AACrB,aAAO,IAAP;AACD;;AAED,QAAMC,WAAW,GAAGb,MAAM,CAACa,WAAP,EAApB;;AACA,QAAIC,SAAS,GAAGC,mBAASC,GAAT,EAAhB;;AAEA,SAAK,IAAIC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGP,SAAS,CAACE,MAAtC,EAA8CK,KAAK,IAAI,CAAvD,EAA0D;AACxD;AACAH,MAAAA,SAAS,GAAGA,SAAS,CAACI,OAAV,GAAoBA,OAApB,EAAZ;AAEAL,MAAAA,WAAW,CAACM,KAAZ,CAAkBT,SAAS,CAACO,KAAD,CAA3B,EAAoC;AAClCG,QAAAA,GAAG,EAAE;AAAC,WAACX,2BAAD,GAAoBK,SAAS,CAACO;AAA/B;AAD6B,OAApC;AAGD;;AAED,WAAOR,WAAW,CACfS,MADI,GAEJC,IAFI,CAEEC,MAAD,IAAYA,MAFb,EAGJC,KAHI,CAGGC,GAAD,IAASA,GAHX,CAAP;AAID,G","sourcesContent":["import {LexoRank} from 'lexorank'\nimport sanityClient from 'part:@sanity/base/client'\nimport {ORDER_FIELD_NAME} from './constants'\n\nconst client = sanityClient.withConfig({\n apiVersion: '2021-09-01',\n})\n\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 = ``) {\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.value},\n })\n }\n\n return transaction\n .commit()\n .then((update) => update)\n .catch((err) => err)\n}\n"],"file":"resetOrder.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/orderable-document-list",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Drag-and-drop Document Ordering without leaving the Editing surface",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@sanity/icons": "^1.2.1",
|
|
32
|
-
"@sanity/ui": "^0.
|
|
32
|
+
"@sanity/ui": "^0.37.6",
|
|
33
33
|
"lexorank": "^1.0.4",
|
|
34
|
-
"prop-types": "15.
|
|
34
|
+
"prop-types": "^15.8.1",
|
|
35
35
|
"react-beautiful-dnd": "^13.1.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
"husky": "^7.0.2",
|
|
54
54
|
"pinst": "^2.1.6",
|
|
55
55
|
"prettier": "^2.4.1",
|
|
56
|
-
"sanipack": "2.0
|
|
56
|
+
"sanipack": "^2.1.0"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@sanity/desk-tool": "^2.
|
|
59
|
+
"@sanity/desk-tool": "^2.29.0",
|
|
60
60
|
"react": "^17.0.2"
|
|
61
61
|
},
|
|
62
62
|
"bugs": {
|
package/src/Document.js
CHANGED
|
@@ -25,6 +25,24 @@ export default function Document({doc, increment, entities, handleSelect, index,
|
|
|
25
25
|
<DragHandleIcon />
|
|
26
26
|
</Text>
|
|
27
27
|
</Box>
|
|
28
|
+
{showIncrements && (
|
|
29
|
+
<Flex style={{flexShrink: 0}} align="center" gap={1} paddingRight={1}>
|
|
30
|
+
<Button
|
|
31
|
+
padding={2}
|
|
32
|
+
mode="ghost"
|
|
33
|
+
onClick={() => increment(index, index + -1, doc._id, entities)}
|
|
34
|
+
disabled={isFirst}
|
|
35
|
+
icon={ChevronUpIcon}
|
|
36
|
+
/>
|
|
37
|
+
<Button
|
|
38
|
+
padding={2}
|
|
39
|
+
mode="ghost"
|
|
40
|
+
disabled={isLast}
|
|
41
|
+
onClick={() => increment(index, index + 1, doc._id, entities)}
|
|
42
|
+
icon={ChevronDownIcon}
|
|
43
|
+
/>
|
|
44
|
+
</Flex>
|
|
45
|
+
)}
|
|
28
46
|
<Button
|
|
29
47
|
style={{width: `100%`}}
|
|
30
48
|
padding={2}
|
|
@@ -32,24 +50,6 @@ export default function Document({doc, increment, entities, handleSelect, index,
|
|
|
32
50
|
onClick={(e) => handleSelect(doc._id, index, e.nativeEvent)}
|
|
33
51
|
>
|
|
34
52
|
<Flex flex={1} align="center">
|
|
35
|
-
{showIncrements && (
|
|
36
|
-
<Flex style={{flexShrink: 0}} align="center" gap={1} paddingRight={2}>
|
|
37
|
-
<Button
|
|
38
|
-
padding={2}
|
|
39
|
-
mode="ghost"
|
|
40
|
-
onClick={() => increment(index, index + -1, doc._id, entities)}
|
|
41
|
-
disabled={isFirst}
|
|
42
|
-
icon={ChevronUpIcon}
|
|
43
|
-
/>
|
|
44
|
-
<Button
|
|
45
|
-
padding={2}
|
|
46
|
-
mode="ghost"
|
|
47
|
-
disabled={isLast}
|
|
48
|
-
onClick={() => increment(index, index + 1, doc._id, entities)}
|
|
49
|
-
icon={ChevronDownIcon}
|
|
50
|
-
/>
|
|
51
|
-
</Flex>
|
|
52
|
-
)}
|
|
53
53
|
<Box flex={1}>
|
|
54
54
|
<Preview value={doc} type={schema.get(doc._type)} />
|
|
55
55
|
</Box>
|
package/src/DocumentListQuery.js
CHANGED
|
@@ -2,7 +2,6 @@ import PropTypes from 'prop-types'
|
|
|
2
2
|
import React, {useEffect, useState, useMemo} from 'react'
|
|
3
3
|
import sanityClient from 'part:@sanity/base/client'
|
|
4
4
|
import {Stack, Box, Flex, Spinner} from '@sanity/ui'
|
|
5
|
-
import {usePaneRouter} from '@sanity/desk-tool'
|
|
6
5
|
|
|
7
6
|
import DraggableList from './DraggableList'
|
|
8
7
|
import {ORDER_FIELD_NAME} from './helpers/constants'
|
|
@@ -16,10 +15,11 @@ export default function DocumentListQuery({type}) {
|
|
|
16
15
|
const [isLoading, setIsLoading] = useState(true)
|
|
17
16
|
const [isUpdating, setIsUpdating] = useState(false)
|
|
18
17
|
const [data, setData] = useState([])
|
|
19
|
-
const router = usePaneRouter()
|
|
20
18
|
|
|
21
19
|
useEffect(() => {
|
|
22
|
-
const query = `*[_type == $type]|order(@[$order] asc)
|
|
20
|
+
const query = `*[_type == $type]|order(@[$order] asc){
|
|
21
|
+
_id, _type, ${ORDER_FIELD_NAME}
|
|
22
|
+
}`
|
|
23
23
|
const queryParams = {type, order: ORDER_FIELD_NAME}
|
|
24
24
|
let subscription = null
|
|
25
25
|
|
|
@@ -63,7 +63,7 @@ export default function DocumentListQuery({type}) {
|
|
|
63
63
|
|
|
64
64
|
return () => subscription?.unsubscribe()
|
|
65
65
|
/* eslint-disable-next-line react-hooks/exhaustive-deps */
|
|
66
|
-
}, [])
|
|
66
|
+
}, [type])
|
|
67
67
|
|
|
68
68
|
const unorderedDataCount = useMemo(
|
|
69
69
|
() => (data.length ? data.filter((doc) => !doc[ORDER_FIELD_NAME]).length : 0),
|
|
@@ -38,10 +38,14 @@ export default class OrderableDocumentList extends Component {
|
|
|
38
38
|
|
|
39
39
|
const update = await resetOrder(this.props.options.type)
|
|
40
40
|
|
|
41
|
+
const reorderWasSuccessful = update?.results?.length
|
|
42
|
+
|
|
41
43
|
this.setState(() => ({
|
|
42
44
|
resetOrderTransaction: {
|
|
43
|
-
status: `success`,
|
|
44
|
-
title:
|
|
45
|
+
status: reorderWasSuccessful ? `success` : `info`,
|
|
46
|
+
title: reorderWasSuccessful
|
|
47
|
+
? `Reordered ${update.results.length === 1 ? `Document` : `Documents`}`
|
|
48
|
+
: `Reordering failed`,
|
|
45
49
|
closable: true,
|
|
46
50
|
},
|
|
47
51
|
}))
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import S from '@sanity/desk-tool/structure-builder'
|
|
2
2
|
import {SortIcon, GenerateIcon} from '@sanity/icons'
|
|
3
|
+
import schema from 'part:@sanity/base/schema'
|
|
4
|
+
|
|
3
5
|
import OrderableDocumentList from '../OrderableDocumentList'
|
|
4
6
|
|
|
5
7
|
export function orderableDocumentListDeskItem(config = {}) {
|
|
@@ -16,19 +18,23 @@ export function orderableDocumentListDeskItem(config = {}) {
|
|
|
16
18
|
const listTitle = title ?? `Orderable ${type}`
|
|
17
19
|
const listId = `orderable-${type}`
|
|
18
20
|
const listIcon = icon ?? SortIcon
|
|
21
|
+
const typeTitle = schema.get(type)?.title ?? type
|
|
19
22
|
|
|
20
23
|
return S.listItem(type)
|
|
21
24
|
.title(listTitle)
|
|
22
25
|
.id(listId)
|
|
23
26
|
.icon(listIcon)
|
|
24
27
|
.child(
|
|
25
|
-
// This appears to be the only way to have a custom component in a list AND have a "compose" button that works
|
|
26
28
|
Object.assign(S.documentTypeList(type).serialize(), {
|
|
29
|
+
__preserveInstance: true,
|
|
27
30
|
type: 'component',
|
|
28
31
|
component: OrderableDocumentList,
|
|
29
32
|
options: {type},
|
|
30
33
|
menuItems: [
|
|
31
|
-
|
|
34
|
+
S.menuItem()
|
|
35
|
+
.title(`Create new ${typeTitle}`)
|
|
36
|
+
.intent({type: 'create', params: {type}})
|
|
37
|
+
.serialize(),
|
|
32
38
|
S.menuItem().title(`Reset Order`).icon(GenerateIcon).action(`resetOrder`).serialize(),
|
|
33
39
|
S.menuItem().title(`Show Increments`).icon(SortIcon).action(`showIncrements`).serialize(),
|
|
34
40
|
],
|
|
@@ -9,10 +9,14 @@ const client = sanityClient.withConfig({
|
|
|
9
9
|
// Function to wipe and re-do ordering with LexoRank
|
|
10
10
|
// Will at least attempt to start with the current order
|
|
11
11
|
export async function resetOrder(type = ``) {
|
|
12
|
-
const query = `*[_type == $type]|order(@[$order] asc)`
|
|
12
|
+
const query = `*[_type == $type]|order(@[$order] asc)._id`
|
|
13
13
|
const queryParams = {type, order: ORDER_FIELD_NAME}
|
|
14
14
|
const documents = await client.fetch(query, queryParams)
|
|
15
15
|
|
|
16
|
+
if (!documents.length) {
|
|
17
|
+
return null
|
|
18
|
+
}
|
|
19
|
+
|
|
16
20
|
const transaction = client.transaction()
|
|
17
21
|
let aLexoRank = LexoRank.min()
|
|
18
22
|
|
|
@@ -20,7 +24,7 @@ export async function resetOrder(type = ``) {
|
|
|
20
24
|
// Generate next rank before even the first document so there's room to move!
|
|
21
25
|
aLexoRank = aLexoRank.genNext().genNext()
|
|
22
26
|
|
|
23
|
-
transaction.patch(documents[index]
|
|
27
|
+
transaction.patch(documents[index], {
|
|
24
28
|
set: {[ORDER_FIELD_NAME]: aLexoRank.value},
|
|
25
29
|
})
|
|
26
30
|
}
|