@sanity/orderable-document-list 0.0.4 → 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.
@@ -64,7 +64,7 @@ function DocumentListQuery(_ref) {
64
64
  setData = _useState6[1];
65
65
 
66
66
  (0, _react.useEffect)(() => {
67
- var query = "*[_type == $type]|order(@[$order] asc)";
67
+ var query = "*[_type == $type]|order(@[$order] asc){\n _id, _type, ".concat(_constants.ORDER_FIELD_NAME, "\n }");
68
68
  var queryParams = {
69
69
  type,
70
70
  order: _constants.ORDER_FIELD_NAME
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DocumentListQuery.js"],"names":["client","sanityClient","withConfig","apiVersion","DocumentListQuery","type","isLoading","setIsLoading","isUpdating","setIsUpdating","data","setData","query","queryParams","order","ORDER_FIELD_NAME","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 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"}
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":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,MAAM,GAAGC,gBAAaC,UAAb,CAAwB;AACrCC,EAAAA,UAAU,EAAE;AADyB,CAAxB,CAAf;;AAIe,SAASC,iBAAT,OAAmC;AAAA,MAAPC,IAAO,QAAPA,IAAO;;AAChD,kBAAkC,qBAAS,IAAT,CAAlC;AAAA;AAAA,MAAOC,SAAP;AAAA,MAAkBC,YAAlB;;AACA,mBAAoC,qBAAS,KAAT,CAApC;AAAA;AAAA,MAAOC,UAAP;AAAA,MAAmBC,aAAnB;;AACA,mBAAwB,qBAAS,EAAT,CAAxB;AAAA;AAAA,MAAOC,IAAP;AAAA,MAAaC,OAAb;;AAEA,wBAAU,MAAM;AACd,QAAMC,KAAK,wEACKC,2BADL,YAAX;AAGA,QAAMC,WAAW,GAAG;AAACT,MAAAA,IAAD;AAAOU,MAAAA,KAAK,EAAEF;AAAd,KAApB;AACA,QAAIG,YAAY,GAAG,IAAnB,CALc,CAOd;;AACA,QAAMC,SAAS;AAAA,oCAAG,aAAY;AAC5BjB,QAAAA,MAAM,CAACkB,KAAP,CAAaN,KAAb,EAAoBE,WAApB,EAAiCK,IAAjC,CAAuCC,SAAD,IAAe;AACnD;AACA,cAAMC,iBAAiB,GAAGD,SAAS,CAACE,MAAV,CAAiB,CAACC,GAAD,EAAMC,GAAN,KAAc;AACvD,gBAAI,CAACA,GAAG,CAACC,GAAJ,CAAQC,UAAR,WAAL,EAAoC;AAClC;AACA,kBAAMC,YAAY,GAAGP,SAAS,CAACQ,IAAV,CAAgBC,GAAD,IAASA,GAAG,CAACJ,GAAJ,sBAAsBD,GAAG,CAACC,GAA1B,CAAxB,CAArB;AAEA,qBAAOE,YAAY,GAAGJ,GAAH,GAAS,CAAC,GAAGA,GAAJ,EAASC,GAAT,CAA5B;AACD;;AAED,mBAAO,CAAC,GAAGD,GAAJ,EAASC,GAAT,CAAP;AACD,WATyB,EASvB,EATuB,CAA1B;AAWAb,UAAAA,OAAO,CAACU,iBAAD,CAAP;;AAEA,cAAIf,SAAJ,EAAe;AACbC,YAAAA,YAAY,CAAC,KAAD,CAAZ;AACD;AACF,SAlBD;AAmBD,OApBc;;AAAA,sBAATU,SAAS;AAAA;AAAA;AAAA,OAAf;;AAsBA,QAAMa,WAAW;AAAA,oCAAG,aAAY;AAC9BvB,QAAAA,YAAY,CAAC,IAAD,CAAZ;AAEA,cAAMU,SAAS,EAAf;;AAEA,YAAI,CAACD,YAAL,EAAmB;AACjBA,UAAAA,YAAY,GAAGhB,MAAM,CAAC+B,MAAP,CAAcnB,KAAd,EAAqBE,WAArB,EAAkCkB,SAAlC,CAA4C,MAAMf,SAAS,EAA3D,CAAf;AACD;AACF,OARgB;;AAAA,sBAAXa,WAAW;AAAA;AAAA;AAAA,OAAjB,CA9Bc,CAwCd;;;AACA,QAAI,CAACtB,UAAD,IAAe,CAACE,IAAI,CAACuB,MAAzB,EAAiC;AAC/BH,MAAAA,WAAW;AACZ;;AAED,WAAO;AAAA;;AAAA,8BAAMd,YAAN,kDAAM,cAAckB,WAAd,EAAN;AAAA,KAAP;AACA;AACD,GA/CD,EA+CG,CAAC7B,IAAD,CA/CH;AAiDA,MAAM8B,kBAAkB,GAAG,oBACzB,MAAOzB,IAAI,CAACuB,MAAL,GAAcvB,IAAI,CAAC0B,MAAL,CAAaP,GAAD,IAAS,CAACA,GAAG,CAAChB,2BAAD,CAAzB,EAA6CoB,MAA3D,GAAoE,CADlD,EAEzB,CAACvB,IAAD,CAFyB,CAA3B;AAKA,MAAIJ,SAAJ,EACE,oBACE,6BAAC,QAAD;AAAM,IAAA,KAAK,EAAE;AAAC+B,MAAAA,KAAK,QAAN;AAAgBC,MAAAA,MAAM;AAAtB,KAAb;AAA8C,IAAA,KAAK,EAAC,QAApD;AAA6D,IAAA,OAAO,EAAC;AAArE,kBACE,6BAAC,WAAD,OADF,CADF;AAMF,sBACE,6BAAC,SAAD;AAAO,IAAA,KAAK,EAAE,CAAd;AAAiB,IAAA,KAAK,EAAE;AAACC,MAAAA,QAAQ,UAAT;AAAqBD,MAAAA,MAAM;AAA3B;AAAxB,KACGH,kBAAkB,GAAG,CAArB,iBACC,6BAAC,iBAAD,QACGA,kBADH,OACwBzB,IAAI,CAACuB,MAD7B,sCACqE,GADrE,eAEE,2DAFF,iCAFJ,eAOE,6BAAC,OAAD;AAAK,IAAA,OAAO,EAAE;AAAd,kBACE,6BAAC,sBAAD;AAAe,IAAA,IAAI,EAAEvB,IAArB;AAA2B,IAAA,UAAU,EAAEF,UAAvC;AAAmD,IAAA,aAAa,EAAEC;AAAlE,IADF,CAPF,CADF;AAaD;;AAEDL,iBAAiB,CAACoC,SAAlB,GAA8B;AAC5BnC,EAAAA,IAAI,EAAEoC,mBAAUC,MAAV,CAAiBC;AADK,CAA9B","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"}
@@ -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, " Documents"),
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,CAACT,QAAL,CAAc,OAAO;AACnBG,YAAAA,qBAAqB,EAAE;AACrBC,cAAAA,MAAM,WADe;AAErBC,cAAAA,KAAK,sBAAeE,MAAM,CAACG,OAAP,CAAeC,MAA9B,eAFgB;AAGrBL,cAAAA,QAAQ,EAAE;AAHW;AADJ,WAAP,CAAd;AAOD,SAlBS;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAPK,KARE;;AAEjB,SAAKL,KAAL,GAAa;AACXF,MAAAA,cAAc,EAAE,KADL;AAEXI,MAAAA,qBAAqB,EAAE;AAFZ,KAAb;AAID;;AA8BDS,EAAAA,MAAM,GAAG;AAAA;;AACP,wBACE,6BAAC,4BAAD;AACE,MAAA,IAAI,EAAE,IAAF,aAAE,IAAF,sCAAE,KAAMd,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;;AAnD0D;;;;gBAAxCR,qB,eACA;AACjBa,EAAAA,OAAO,EAAEK,mBAAUC,KAAV,CAAgB;AACvBL,IAAAA,IAAI,EAAEI,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 this.setState(() => ({\n resetOrderTransaction: {\n status: `success`,\n title: `Reordered ${update.results.length} Documents`,\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"}
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"}
@@ -31,8 +31,8 @@ function orderableDocumentListDeskItem() {
31
31
  var listId = "orderable-".concat(type);
32
32
  var listIcon = icon !== null && icon !== void 0 ? icon : _icons.SortIcon;
33
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( // This appears to be the only way to have a custom component in a list AND have a "compose" button that works
35
- Object.assign(_structureBuilder.default.documentTypeList(type).serialize(), {
34
+ return _structureBuilder.default.listItem(type).title(listTitle).id(listId).icon(listIcon).child(Object.assign(_structureBuilder.default.documentTypeList(type).serialize(), {
35
+ __preserveInstance: true,
36
36
  type: 'component',
37
37
  component: _OrderableDocumentList.default,
38
38
  options: {
@@ -1 +1 @@
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","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,EAKH;AACAC,EAAAA,MAAM,CAACC,MAAP,CAAcL,0BAAEM,gBAAF,CAAmBjB,IAAnB,EAAyBkB,SAAzB,EAAd,EAAoD;AAClDlB,IAAAA,IAAI,EAAE,WAD4C;AAElDmB,IAAAA,SAAS,EAAEC,8BAFuC;AAGlDC,IAAAA,OAAO,EAAE;AAACrB,MAAAA;AAAD,KAHyC;AAIlDsB,IAAAA,SAAS,EAAE,CACTX,0BAAEY,QAAF,GACGrB,KADH,sBACuBM,SADvB,GAEGgB,MAFH,CAEU;AAACxB,MAAAA,IAAI,EAAE,QAAP;AAAiByB,MAAAA,MAAM,EAAE;AAACzB,QAAAA;AAAD;AAAzB,KAFV,EAGGkB,SAHH,EADS,EAKTP,0BAAEY,QAAF,GAAarB,KAAb,gBAAkCC,IAAlC,CAAuCuB,mBAAvC,EAAqDC,MAArD,eAA0ET,SAA1E,EALS,EAMTP,0BAAEY,QAAF,GAAarB,KAAb,oBAAsCC,IAAtC,CAA2CI,eAA3C,EAAqDoB,MAArD,mBAA8ET,SAA9E,EANS;AAJuC,GAApD,CANG,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 // This appears to be the only way to have a custom component in a list AND have a \"compose\" button that works\n Object.assign(S.documentTypeList(type).serialize(), {\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"}
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"}
@@ -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]._id, {
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","length","genNext","patch","_id","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,2CAAX;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,QAAMK,WAAW,GAAGZ,MAAM,CAACY,WAAP,EAApB;;AACA,QAAIC,SAAS,GAAGC,mBAASC,GAAT,EAAhB;;AAEA,SAAK,IAAIC,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGN,SAAS,CAACO,MAAtC,EAA8CD,KAAK,IAAI,CAAvD,EAA0D;AACxD;AACAH,MAAAA,SAAS,GAAGA,SAAS,CAACK,OAAV,GAAoBA,OAApB,EAAZ;AAEAN,MAAAA,WAAW,CAACO,KAAZ,CAAkBT,SAAS,CAACM,KAAD,CAAT,CAAiBI,GAAnC,EAAwC;AACtCC,QAAAA,GAAG,EAAE;AAAC,WAACZ,2BAAD,GAAoBI,SAAS,CAACS;AAA/B;AADiC,OAAxC;AAGD;;AAED,WAAOV,WAAW,CACfW,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)`\n const queryParams = {type, order: ORDER_FIELD_NAME}\n const documents = await client.fetch(query, queryParams)\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]._id, {\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"}
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.4",
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.36.12",
32
+ "@sanity/ui": "^0.37.6",
33
33
  "lexorank": "^1.0.4",
34
- "prop-types": "15.7.2",
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.1"
56
+ "sanipack": "^2.1.0"
57
57
  },
58
58
  "peerDependencies": {
59
- "@sanity/desk-tool": "^2.21.3",
59
+ "@sanity/desk-tool": "^2.29.0",
60
60
  "react": "^17.0.2"
61
61
  },
62
62
  "bugs": {
@@ -17,7 +17,9 @@ export default function DocumentListQuery({type}) {
17
17
  const [data, setData] = useState([])
18
18
 
19
19
  useEffect(() => {
20
- const query = `*[_type == $type]|order(@[$order] asc)`
20
+ const query = `*[_type == $type]|order(@[$order] asc){
21
+ _id, _type, ${ORDER_FIELD_NAME}
22
+ }`
21
23
  const queryParams = {type, order: ORDER_FIELD_NAME}
22
24
  let subscription = null
23
25
 
@@ -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: `Reordered ${update.results.length} Documents`,
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
  }))
@@ -25,8 +25,8 @@ export function orderableDocumentListDeskItem(config = {}) {
25
25
  .id(listId)
26
26
  .icon(listIcon)
27
27
  .child(
28
- // This appears to be the only way to have a custom component in a list AND have a "compose" button that works
29
28
  Object.assign(S.documentTypeList(type).serialize(), {
29
+ __preserveInstance: true,
30
30
  type: 'component',
31
31
  component: OrderableDocumentList,
32
32
  options: {type},
@@ -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]._id, {
27
+ transaction.patch(documents[index], {
24
28
  set: {[ORDER_FIELD_NAME]: aLexoRank.value},
25
29
  })
26
30
  }