@riboseinc/paneron-registry-kit 2.2.43 → 2.2.45
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/package.json +1 -1
- package/proposals/objectChangeset.js +16 -7
- package/proposals/objectChangeset.js.map +1 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js +5 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
- package/views/FilterCriteria/index.js +9 -13
- package/views/FilterCriteria/index.js.map +1 -1
- package/views/SearchQuery.js +1 -1
- package/views/SearchQuery.js.map +1 -1
- package/views/detail/RegisterHome2/index.js +0 -1
- package/views/detail/RegisterHome2/index.js.map +1 -1
- package/views/sidebar/Search/index.js +1 -1
- package/views/sidebar/Search/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -57,7 +57,6 @@ importingStakeholderGitServerUsername, getObjectData, resolvePredicates) {
|
|
|
57
57
|
const crID = proposalDraft.id;
|
|
58
58
|
const crPath = (0, _itemPathUtils.crIDToCRPath)(crID);
|
|
59
59
|
const itemPaths = Object.keys(proposalDraft.items);
|
|
60
|
-
const proposals = Object.values(proposalDraft.items);
|
|
61
60
|
|
|
62
61
|
for (const itemPath of itemPaths) {
|
|
63
62
|
const itemRef = (0, _itemPathUtils.itemPathToItemRef)(false, itemPath);
|
|
@@ -65,18 +64,28 @@ importingStakeholderGitServerUsername, getObjectData, resolvePredicates) {
|
|
|
65
64
|
if (!itemClasses[itemRef.classID]) {
|
|
66
65
|
throw new Error(`Imported proposal contains item(s) of unknown class ${itemRef.classID}`);
|
|
67
66
|
}
|
|
68
|
-
}
|
|
67
|
+
} //const proposals = Object.values(proposalDraft.items);
|
|
68
|
+
// if (proposals.find(prop => prop.type !== 'addition')) {
|
|
69
|
+
// throw new Error("Only addition proposals can be imported at this time");
|
|
70
|
+
// }
|
|
69
71
|
|
|
70
|
-
if (proposals.find(prop => prop.type !== 'addition')) {
|
|
71
|
-
throw new Error("Only addition proposals can be imported at this time");
|
|
72
|
-
}
|
|
73
72
|
|
|
73
|
+
const additionalItemPaths = Object.entries(proposalDraft.items).filter(([, prop]) => prop.type === 'addition').map(([path]) => path);
|
|
74
74
|
const existingItems = (await getObjectData({
|
|
75
|
-
objectPaths:
|
|
75
|
+
objectPaths: additionalItemPaths
|
|
76
76
|
})).data;
|
|
77
77
|
|
|
78
78
|
if (Object.values(existingItems).find(v => v !== null)) {
|
|
79
|
-
throw new Error("Register already contains item(s) in this proposal");
|
|
79
|
+
throw new Error("Register already contains item(s) being added in this proposal");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const clarifiedItemPaths = Object.entries(proposalDraft.items).filter(([, prop]) => prop.type === 'clarification').map(([path]) => path);
|
|
83
|
+
const clarifiedItems = (await getObjectData({
|
|
84
|
+
objectPaths: clarifiedItemPaths
|
|
85
|
+
})).data;
|
|
86
|
+
|
|
87
|
+
if (Object.values(clarifiedItems).find(v => v === null)) {
|
|
88
|
+
throw new Error("Register does not contain some of the item(s) being clarified in this proposal");
|
|
80
89
|
}
|
|
81
90
|
|
|
82
91
|
const changeset = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectChangeset.js","sourceRoot":"","sources":["../../src/proposals/objectChangeset.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAQ1C,OAAO,EACL,KAAK,GAKN,MAAM,SAAS,CAAC;AAGjB,iEAAiE;AACjE,MAAM,UAAU,oBAAoB,CAClC,EAAU,EACV,aAAqB,EACrB,eAAuB,EACvB,4BAAoC;IAGpC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAY;QAClB,EAAE;QACF,WAAW;QACX,UAAU,EAAE,WAAW;QACvB,aAAa;QACb,sCAAsC,EAAE,4BAA4B;QACpE,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,eAAe;KAChB,CAAC;IACF,MAAM,YAAY,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO;QACL,CAAC,YAAY,CAAC,EAAE;YACd,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,EAAE;SACb;KACF,CAAA;AACH,CAAC;AAGD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,YAA0B;AAC1B,yDAAyD;AACzD,WAAsC;AACtC,wDAAwD;AACxD,qCAA6C,EAC7C,aAAoF,EACpF,iBAA4E;;IAG5E,MAAM,aAAa,GAAY,YAAY,CAAC,aAAa,CAAC;IAC1D,aAAa,CAAC,sCAAsC,GAAG,qCAAqC,CAAC;IAC7F,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAErD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,uDAAuD,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;SAC3F;KACF;IAED,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;QACpD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;KACzE;IAED,MAAM,aAAa,GAAG,CAAC,MAAM,aAAa,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;QACtD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;KACvE;IAED,MAAM,SAAS,GAAoB;QACjC,CAAC,MAAM,CAAC,EAAE;YACR,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,aAAa;SACxB;KACF,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAA,YAAY,CAAC,YAAY,mCAAI,EAAE,CAAC,EAAE;QACrF,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,0BAA0B,CAAC,CAAC;SACtF;QACD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;SAC9D;QACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE;YACvB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG;gBACxC,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,WAAW;aACtB,CAAC;SACH;aAAM;YACL,IAAI,CAAC,iBAAiB,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;aACxE;YACD,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG;gBACxC,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,iBAAiB,CAAC,WAAW,EAAE,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;aAC9E,CAAC;SACH;KACF;IAED,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AA2BD,SAAS,WAAW,CAAC,GAAQ;IAC3B,OAAO,GAAG,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC;AAC3C,CAAC;AAKD;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,KAAQ,EACR,kBAAgD;IAEhD,4FAA4F;IAC5F,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QACtB,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;SACrE;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;YAC5B,OAAO,GAAmB,CAAC;SAC5B;aAAM;YACL,OAAO,GAAG,CAAC,MAAsB,CAAC;SACnC;KACF;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAQ,CAAC;SAC/E;aAAM;YACL,iCAAiC;YACjC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC5C,KAAK,CAAC,GAAyB,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;aAC7E;YACD,OAAO,KAAY,CAAC;SACrB;KACF;SAAM;QACL,OAAO,KAAY,CAAC;KACrB;AACH,CAAC;AAED,SAAS,iBAAiB;AACxB;;;GAGG;AACH,KAA0B;AAE1B,+CAA+C;AAC/C,MAAoB;IAEpB,MAAM,SAAS,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,GAAG,EAAU,CAAC;IAE9C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QACtB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KAChC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;aACpC;YACD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;SACxD;aAAM;YACL,iCAAiC;YACjC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACpC,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;aACjC;SACF;KACF;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD;;;GAGG;AACH,MAAM,UAAU,uBAAuB;AACrC;;GAEG;AACH,EAAuF;AAEvF;;;;GAIG;AACH,aAAoD;AAEpD;;;GAGG;AACH,WAA8C,EAAE;IAEhD,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAChE,yBAAyB;QACzB,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;SAC/B;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC7B,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC3B;QACD,uBAAuB;QACvB,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,UAAU,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAK,eAAe,EAAE;YACvE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,gBAAgB,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE;gBAClE,OAAO,CAAC,KAAK,CAAC,gFAAgF,EAAE,QAAQ,CAAC,CAAC;gBAC1G,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;aACnG;YACD,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;gBACzC,sCAAsC;gBACtC,4DAA4D;gBAC5D,QAAQ,EAAE,gBAAgB;aAC3B,CAAC;SACH;aAAM;YACL,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;gBACzC,sCAAsC;gBACtC,4DAA4D;gBAC5D,QAAQ,EAAE,IAAI;aACf,CAAC;SACH;KACF;IACD,sBAAsB;IACtB,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,SAAS,CAAC,MAAM,CAAC,GAAG;QAClB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE;KAC7D,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAY,EACZ,eAAwB,EACxB,SAAsB,EACtB,QAAkD,EAClD,WAAqD;IAErD,MAAM,EAAE,GAAoB,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC5D,wFAAwF;QACxF,MAAM,OAAO,GAAG,iBAAiB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE7D,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;YAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;gBACpC,OAAO,CAAC,KAAK,CAAC,gFAAgF,EAAE,QAAQ,CAAC,CAAC;gBAC1G,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;aACnG;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,aAAa,KAAK,cAAc,EAAE;gBAC9E,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;aAC9G;iBAAM;gBACL,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;aAC9G;SACF;aAAM;YACL,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;SAC9G;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8DAA8D;AAC9D;;;;;;GAMG;AACH,KAAK,UAAU,yBAAyB,CACtC,IAAY,EACZ,QAAwB,EACxB,OAA8B,EAC9B,QAAgB,EAChB,QAAkD,EAClD,WAAqD;;IAErD,IAAI,WAA8B,CAAC;IACnC,MAAM,SAAS,GAAyC,EAAE,CAAC;IAE3D,MAAM,QAAQ,GAAG,MAAA,QAAQ,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAA,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,mCAAI,IAAI,CAAC;IAElE,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;QAChC,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;SAC9F;QAED,WAAW,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAE9B,QAAQ,QAAQ,CAAC,IAAI,EAAE;YACrB,KAAK,eAAe;gBAClB,IAAI,OAAO,KAAK,IAAI,EAAE;oBACpB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;iBAC1F;gBACD,kDAAkD;gBAClD,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA,CAAC,wBAAwB;gBACxD,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,SAAS,GAAG,QAAqB,CAAC;gBACxC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;gBAE/B,QAAQ,SAAS,CAAC,aAAa,EAAE;oBAC/B,KAAK,YAAY;wBACf,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC/B,MAAM;oBACR,KAAK,cAAc;wBACjB,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC;wBAC/B,MAAM;oBACR,KAAK,cAAc;wBACjB,MAAM,YAAY,GAAG,QAAwB,CAAC;wBAC9C,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC;wBAClC,WAAW,CAAC,YAAY,GAAG,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;4BACxE,MAAM;4BACN,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,aAAa,EAAE,OAAO,CAAC,aAAa;yBACrC,CAAC,CAAC,CAAC;wBACJ,KAAK,MAAM,mBAAmB,IAAI,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE;4BAC3F,MAAM,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;4BAC1D,IAAI,mBAAmB,EAAE;gCACvB,SAAS,CAAC,mBAAmB,CAAC,GAAG;oCAC/B,QAAQ,EAAE,mBAAmB;oCAC7B,QAAQ,EAAE;wCACR,GAAG,mBAAmB;wCACtB,UAAU,EAAE,CAAE,GAAG,CAAC,MAAA,mBAAmB,CAAC,UAAU,mCAAI,EAAE,CAAC,EAAE,OAAO,CAAE;qCACnE;iCACF,CAAC;6BACH;yBACF;wBACD,MAAM;iBACT;gBACD,MAAM;SACT;KACF;SAAM;QACL,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;SACrF;QACD,WAAW,GAAG;YACZ,EAAE,EAAE,OAAO,CAAC,MAAM;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,IAAI,IAAI,EAAE;SACzB,CAAC;KACH;IAED,SAAS,CAAC,QAAQ,CAAC,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,WAAW;KACtB,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { Change, Changeset } from '@riboseinc/paneron-extension-kit/types/changes';\nimport type { ObjectDataset, ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\n\nimport {\n crIDToCRPath,\n itemPathInCR,\n itemPathToItemRef,\n itemRefToItemPath,\n} from '../views/itemPathUtils';\nimport type {\n InternalItemReference,\n RegisterItem,\n ItemClassConfigurationSet,\n} from '../types';\nimport { isRegisterItem } from '../types';\n\nimport type {\n ProposalSet,\n ChangeProposal,\n Amendment,\n Supersession,\n} from './types';\nimport {\n State,\n type Drafted,\n type ReturnedForClarificationByManager,\n type ReturnedForClarificationByControlBody,\n ImportableCR,\n} from './types';\n\n\n/** Takes a justification and ID, returns an object changeset. */\nexport function newCRObjectChangeset(\n id: string,\n justification: string,\n registerVersion: string,\n stakeholderGitServerUsername: string,\n): ObjectChangeset {\n\n const timeStarted = new Date();\n const cr: Drafted = {\n id,\n timeStarted,\n timeEdited: timeStarted,\n justification,\n submittingStakeholderGitServerUsername: stakeholderGitServerUsername,\n items: {},\n state: State.DRAFT,\n registerVersion,\n };\n const crObjectPath = crIDToCRPath(id);\n return {\n [crObjectPath]: {\n oldValue: null,\n newValue: cr,\n },\n }\n}\n\n\n/**\n * Returns an object changeset given an importable proposal,\n * item class definitions for register to import it to,\n * and a function to fetch register item data.\n *\n * Throws an error if importable proposal data isn’t compatible\n * with item class definitions or existing register data.\n */\nexport async function importedProposalToCRObjectChangeset(\n importableCR: ImportableCR,\n /** Available item classes per register configuration. */\n itemClasses: ItemClassConfigurationSet,\n /** VCS username of the person performing the import. */\n importingStakeholderGitServerUsername: string,\n getObjectData: (opts: { objectPaths: string[] }) => Promise<{ data: ObjectDataset }>,\n resolvePredicates?: (predicates: Set<string>) => Promise<ResolvedPredicates>,\n //findObjects: (predicate: string) => Promise<any[]>,\n): Promise<[changeset: ObjectChangeset, id: string]> {\n const proposalDraft: Drafted = importableCR.proposalDraft;\n proposalDraft.submittingStakeholderGitServerUsername = importingStakeholderGitServerUsername;\n const crID = proposalDraft.id;\n const crPath = crIDToCRPath(crID);\n\n const itemPaths = Object.keys(proposalDraft.items);\n const proposals = Object.values(proposalDraft.items);\n\n for (const itemPath of itemPaths) {\n const itemRef = itemPathToItemRef(false, itemPath);\n if (!itemClasses[itemRef.classID]) {\n throw new Error(`Imported proposal contains item(s) of unknown class ${itemRef.classID}`);\n }\n }\n\n if (proposals.find(prop => prop.type !== 'addition')) {\n throw new Error(\"Only addition proposals can be imported at this time\");\n }\n\n const existingItems = (await getObjectData({ objectPaths: itemPaths })).data;\n if (Object.values(existingItems).find(v => v !== null)) {\n throw new Error(\"Register already contains item(s) in this proposal\");\n }\n\n const changeset: ObjectChangeset = {\n [crPath]: {\n oldValue: null,\n newValue: proposalDraft,\n },\n };\n\n for (const [itemPath, itemPayload] of Object.entries(importableCR.itemPayloads ?? {})) {\n if (itemPaths.indexOf(itemPath) < 0) {\n throw new Error(`No proposal found for item at ${itemPath}, but item data is given`);\n }\n if (!isRegisterItem(itemPayload)) {\n throw new Error(`Invalid register item data at ${itemPath}`);\n }\n const predicates = collectPredicates(itemPayload);\n if (predicates.size < 1) {\n changeset[itemPathInCR(itemPath, crID)] = {\n oldValue: null,\n newValue: itemPayload,\n };\n } else {\n if (!resolvePredicates) {\n throw new Error(\"Cannot resolve some predicates in imported proposal\");\n }\n changeset[itemPathInCR(itemPath, crID)] = {\n oldValue: null,\n newValue: replacePredicates(itemPayload, await resolvePredicates(predicates)),\n };\n }\n }\n\n return [changeset, crID];\n}\n\n\n/**\n * When importable CR wants to link to preexisting register items,\n * and it does not know their exact UUIDs but knows some other properties,\n * it can provide this structure in place of a reference.\n *\n * `resolvePredicates()` will resolve any such placeholders to item UUIDs\n * at import time.\n *\n * `mode` should specify whether the predicate should be replaced with\n * only a UUID string ('id', used when classID is already known)\n * or full `InternalItemReference` instance ('generic').\n */\nexport interface Predicate {\n __isPredicate: true\n /**\n * Predicate expression to resolve.\n * Example: `data.identifier && parseInt(data.identifier, 10) === 123`.\n */\n predicate: string\n // TODO: Specify different subtypes for generic and ID?\n mode: 'generic' | 'id'\n}\n\n\nfunction isPredicate(val: any): val is Predicate {\n return val && val.__isPredicate === true;\n}\n\n/** Maps found predicates to resolved item references. */\ntype ResolvedPredicates = Record<string, InternalItemReference>;\n\n/**\n * Resolves any properties that should reference register item UUIDs,\n * but have predicates instead, using a map of found predicates\n * and item references they already were resolved to.\n */\nfunction replacePredicates<T>(\n value: T,\n resolvedPredicates: Readonly<ResolvedPredicates>,\n): T /*extends Predicate ? (string | InternalItemReference) : WithPredicatesResolved<T>*/ {\n // NOTE: Return types are cast because https://github.com/microsoft/TypeScript/issues/33912.\n if (isPredicate(value)) {\n const ref = resolvedPredicates[value.predicate];\n if (!ref) {\n throw new Error(`Could not resolve predicate “${value.predicate}”`);\n }\n if (value.mode === 'generic') {\n return ref as unknown as T;\n } else {\n return ref.itemID as unknown as T;\n }\n } else if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.map((v: any) => replacePredicates(v, resolvedPredicates)) as any;\n } else {\n // Assume plain non-array object.\n for (const [key, v] of Object.entries(value)) {\n value[key as keyof typeof value] = replacePredicates(v, resolvedPredicates);\n }\n return value as any;\n }\n } else {\n return value as any;\n }\n}\n\nfunction collectPredicates(\n /**\n * Imported register item data with possibly some predicates\n * instead of related item references.\n */\n value: unknown | unknown[],\n\n /** Cache for recursive calls, don’t supply. */\n _cache?: Set<string>,\n): Set<string> {\n const collected = _cache ?? new Set<string>();\n\n if (isPredicate(value)) {\n collected.add(value.predicate);\n } else if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const item in value) {\n collectPredicates(item, collected);\n }\n value.map((v: any) => collectPredicates(v, collected));\n } else {\n // Assume plain non-array object.\n for (const v of Object.values(value)) {\n collectPredicates(v, collected);\n }\n }\n }\n\n return collected;\n}\n\n\n/**\n * Returns an object changeset to update CR with new given proposal items.\n * Only applicable to CR at draft edit stage.\n */\nexport function updateCRObjectChangeset(\n /**\n * Change request data.\n */\n cr: Drafted | ReturnedForClarificationByManager | ReturnedForClarificationByControlBody,\n\n /**\n * Proposals by item path.\n * Will be merged with those already existing in `cr`.\n * If a proposal is undefined, it will be removed.\n */\n proposalItems: Record<string, ChangeProposal | null>,\n\n /**\n * New item data must be provided for additions and clarifications,\n * keyed by item path.\n */\n itemData: Record<string, RegisterItem<any>> = {},\n): ObjectChangeset {\n const changeset: ObjectChangeset = {};\n const newItems = { ...cr.items };\n for (const [itemPath, proposal] of Object.entries(proposalItems)) {\n // Update proposals on CR\n if (proposal !== null) {\n newItems[itemPath] = proposal;\n } else if (newItems[itemPath]) {\n delete newItems[itemPath];\n }\n // Add/remove item data\n if (proposal?.type === 'addition' || proposal?.type === 'clarification') {\n const proposedItemData = itemData[itemPath];\n if (proposedItemData === null || !isRegisterItem(proposedItemData)) {\n console.error(\"Unable to convert proposals to object changeset: original item data is missing\", itemPath);\n throw new Error(\"Unable to convert proposals to object changeset: original item data is missing\");\n }\n changeset[itemPathInCR(itemPath, cr.id)] = {\n // When editing a draft, we don’t care\n // about overwriting proposed item data so we omit oldValue.\n newValue: proposedItemData,\n };\n } else {\n changeset[itemPathInCR(itemPath, cr.id)] = {\n // When editing a draft, we don’t care\n // about overwriting proposed item data so we omit oldValue.\n newValue: null,\n };\n }\n }\n // Update main CR data\n const crPath = crIDToCRPath(cr.id);\n changeset[crPath] = {\n oldValue: cr,\n newValue: { ...cr, items: newItems, timeEdited: new Date() },\n };\n return changeset;\n}\n\n\n/**\n * Given change proposals, returns applicable changes\n * to objects in the dataset.\n */\nexport async function proposalsToObjectChangeset(\n crID: string,\n hasSubregisters: boolean,\n proposals: ProposalSet,\n itemData: Record<string, RegisterItem<any> | null>,\n newItemData: Record<string, RegisterItem<any> | null>,\n): Promise<ObjectChangeset> {\n const cs: ObjectChangeset = {};\n\n for (const [itemPath, proposal] of Object.entries(proposals)) {\n //const originalItem: RegisterItem<any> | undefined = (itemData[itemPath] ?? undefined);\n const itemRef = itemPathToItemRef(hasSubregisters, itemPath);\n\n if (proposal.type !== 'addition') {\n if (itemData[itemPath] === undefined) {\n console.error(\"Unable to convert proposals to object changeset: original item data is missing\", itemPath);\n throw new Error(\"Unable to convert proposals to object changeset: original item data is missing\");\n }\n if (proposal.type === 'amendment' && proposal.amendmentType === 'supersession') {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n } else {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n }\n } else {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n }\n }\n\n return cs;\n}\n\n// TODO: Refactor out the business logic of proposal approval.\n/**\n * Given a change proposal, returns applicable changes\n * to objects in the dataset.\n * Core logic of approving a proposal.\n * Takes a proposal and extra options (depending on proposal type).\n * Returns a Changeset containing register items at appropriate paths.\n */\nasync function proposalToObjectChangeset(\n crID: string,\n proposal: ChangeProposal,\n itemRef: InternalItemReference,\n itemPath: string,\n itemData: Record<string, RegisterItem<any> | null>,\n newItemData: Record<string, RegisterItem<any> | null>,\n): Promise<Changeset<Change<RegisterItem<any>>>> {\n let updatedItem: RegisterItem<any>;\n const changeset: Changeset<Change<RegisterItem<any>>> = {};\n\n const origItem = itemData[itemPath] ?? null;\n const newItem = newItemData[itemPathInCR(itemPath, crID)] ?? null;\n\n if (proposal.type !== 'addition') {\n if (origItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires original item data for non-additions\");\n }\n\n updatedItem = { ...origItem };\n\n switch (proposal.type) {\n case 'clarification':\n if (newItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires new item data for clarifications\");\n }\n //const clarification = proposal as Clarification;\n updatedItem.data = newItem.data //clarification.payload;\n break;\n case 'amendment':\n const amendment = proposal as Amendment;\n updatedItem.amendedInCR = crID;\n\n switch (amendment.amendmentType) {\n case 'retirement':\n updatedItem.status = 'retired';\n break;\n case 'invalidation':\n updatedItem.status = 'invalid';\n break;\n case 'supersession':\n const supersession = proposal as Supersession;\n updatedItem.status = 'superseded';\n updatedItem.supersededBy = supersession.supersedingItemIDs.map(itemID => ({\n itemID,\n classID: itemRef.classID,\n subregisterID: itemRef.subregisterID,\n }));\n for (const supersedingItemPath of updatedItem.supersededBy.map(ip => itemRefToItemPath(ip))) {\n const supersedingItemData = itemData[supersedingItemPath];\n if (supersedingItemData) {\n changeset[supersedingItemPath] = {\n oldValue: supersedingItemData,\n newValue: {\n ...supersedingItemData,\n supersedes: [ ...(supersedingItemData.supersedes ?? []), itemRef ],\n },\n };\n }\n }\n break;\n }\n break;\n }\n } else {\n if (newItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires new item data for additions\");\n }\n updatedItem = {\n id: itemRef.itemID,\n data: newItem.data,\n status: 'valid',\n dateAccepted: new Date(),\n };\n }\n\n changeset[itemPath] = {\n oldValue: origItem,\n newValue: updatedItem,\n };\n\n return changeset;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"objectChangeset.js","sourceRoot":"","sources":["../../src/proposals/objectChangeset.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Change, Changeset } from '@riboseinc/paneron-extension-kit/types/changes';\nimport type { ObjectDataset, ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\n\nimport {\n crIDToCRPath,\n itemPathInCR,\n itemPathToItemRef,\n itemRefToItemPath,\n} from '../views/itemPathUtils';\nimport type {\n InternalItemReference,\n RegisterItem,\n ItemClassConfigurationSet,\n} from '../types';\nimport { isRegisterItem } from '../types';\n\nimport type {\n ProposalSet,\n ChangeProposal,\n Amendment,\n Supersession,\n} from './types';\nimport {\n State,\n type Drafted,\n type ReturnedForClarificationByManager,\n type ReturnedForClarificationByControlBody,\n ImportableCR,\n} from './types';\n\n\n/** Takes a justification and ID, returns an object changeset. */\nexport function newCRObjectChangeset(\n id: string,\n justification: string,\n registerVersion: string,\n stakeholderGitServerUsername: string,\n): ObjectChangeset {\n\n const timeStarted = new Date();\n const cr: Drafted = {\n id,\n timeStarted,\n timeEdited: timeStarted,\n justification,\n submittingStakeholderGitServerUsername: stakeholderGitServerUsername,\n items: {},\n state: State.DRAFT,\n registerVersion,\n };\n const crObjectPath = crIDToCRPath(id);\n return {\n [crObjectPath]: {\n oldValue: null,\n newValue: cr,\n },\n }\n}\n\n\n/**\n * Returns an object changeset given an importable proposal,\n * item class definitions for register to import it to,\n * and a function to fetch register item data.\n *\n * Throws an error if importable proposal data isn’t compatible\n * with item class definitions or existing register data.\n */\nexport async function importedProposalToCRObjectChangeset(\n importableCR: ImportableCR,\n /** Available item classes per register configuration. */\n itemClasses: ItemClassConfigurationSet,\n /** VCS username of the person performing the import. */\n importingStakeholderGitServerUsername: string,\n getObjectData: (opts: { objectPaths: string[] }) => Promise<{ data: ObjectDataset }>,\n resolvePredicates?: (predicates: Set<string>) => Promise<ResolvedPredicates>,\n //findObjects: (predicate: string) => Promise<any[]>,\n): Promise<[changeset: ObjectChangeset, id: string]> {\n const proposalDraft: Drafted = importableCR.proposalDraft;\n proposalDraft.submittingStakeholderGitServerUsername = importingStakeholderGitServerUsername;\n const crID = proposalDraft.id;\n const crPath = crIDToCRPath(crID);\n\n const itemPaths = Object.keys(proposalDraft.items);\n\n for (const itemPath of itemPaths) {\n const itemRef = itemPathToItemRef(false, itemPath);\n if (!itemClasses[itemRef.classID]) {\n throw new Error(`Imported proposal contains item(s) of unknown class ${itemRef.classID}`);\n }\n }\n\n //const proposals = Object.values(proposalDraft.items);\n // if (proposals.find(prop => prop.type !== 'addition')) {\n // throw new Error(\"Only addition proposals can be imported at this time\");\n // }\n\n const additionalItemPaths = Object.entries(proposalDraft.items).\n filter(([, prop]) => prop.type === 'addition').\n map(([path, ]) => path);\n const existingItems = (await getObjectData({ objectPaths: additionalItemPaths })).data;\n if (Object.values(existingItems).find(v => v !== null)) {\n throw new Error(\"Register already contains item(s) being added in this proposal\");\n }\n\n const clarifiedItemPaths = Object.entries(proposalDraft.items).\n filter(([, prop]) => prop.type === 'clarification').\n map(([path, ]) => path);\n const clarifiedItems = (await getObjectData({ objectPaths: clarifiedItemPaths })).data;\n if (Object.values(clarifiedItems).find(v => v === null)) {\n throw new Error(\"Register does not contain some of the item(s) being clarified in this proposal\");\n }\n\n const changeset: ObjectChangeset = {\n [crPath]: {\n oldValue: null,\n newValue: proposalDraft,\n },\n };\n\n for (const [itemPath, itemPayload] of Object.entries(importableCR.itemPayloads ?? {})) {\n if (itemPaths.indexOf(itemPath) < 0) {\n throw new Error(`No proposal found for item at ${itemPath}, but item data is given`);\n }\n if (!isRegisterItem(itemPayload)) {\n throw new Error(`Invalid register item data at ${itemPath}`);\n }\n const predicates = collectPredicates(itemPayload);\n if (predicates.size < 1) {\n changeset[itemPathInCR(itemPath, crID)] = {\n oldValue: null,\n newValue: itemPayload,\n };\n } else {\n if (!resolvePredicates) {\n throw new Error(\"Cannot resolve some predicates in imported proposal\");\n }\n changeset[itemPathInCR(itemPath, crID)] = {\n oldValue: null,\n newValue: replacePredicates(itemPayload, await resolvePredicates(predicates)),\n };\n }\n }\n\n return [changeset, crID];\n}\n\n\n/**\n * When importable CR wants to link to preexisting register items,\n * and it does not know their exact UUIDs but knows some other properties,\n * it can provide this structure in place of a reference.\n *\n * `resolvePredicates()` will resolve any such placeholders to item UUIDs\n * at import time.\n *\n * `mode` should specify whether the predicate should be replaced with\n * only a UUID string ('id', used when classID is already known)\n * or full `InternalItemReference` instance ('generic').\n */\nexport interface Predicate {\n __isPredicate: true\n /**\n * Predicate expression to resolve.\n * Example: `data.identifier && parseInt(data.identifier, 10) === 123`.\n */\n predicate: string\n // TODO: Specify different subtypes for generic and ID?\n mode: 'generic' | 'id'\n}\n\n\nfunction isPredicate(val: any): val is Predicate {\n return val && val.__isPredicate === true;\n}\n\n/** Maps found predicates to resolved item references. */\ntype ResolvedPredicates = Record<string, InternalItemReference>;\n\n/**\n * Resolves any properties that should reference register item UUIDs,\n * but have predicates instead, using a map of found predicates\n * and item references they already were resolved to.\n */\nfunction replacePredicates<T>(\n value: T,\n resolvedPredicates: Readonly<ResolvedPredicates>,\n): T /*extends Predicate ? (string | InternalItemReference) : WithPredicatesResolved<T>*/ {\n // NOTE: Return types are cast because https://github.com/microsoft/TypeScript/issues/33912.\n if (isPredicate(value)) {\n const ref = resolvedPredicates[value.predicate];\n if (!ref) {\n throw new Error(`Could not resolve predicate “${value.predicate}”`);\n }\n if (value.mode === 'generic') {\n return ref as unknown as T;\n } else {\n return ref.itemID as unknown as T;\n }\n } else if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n return value.map((v: any) => replacePredicates(v, resolvedPredicates)) as any;\n } else {\n // Assume plain non-array object.\n for (const [key, v] of Object.entries(value)) {\n value[key as keyof typeof value] = replacePredicates(v, resolvedPredicates);\n }\n return value as any;\n }\n } else {\n return value as any;\n }\n}\n\nfunction collectPredicates(\n /**\n * Imported register item data with possibly some predicates\n * instead of related item references.\n */\n value: unknown | unknown[],\n\n /** Cache for recursive calls, don’t supply. */\n _cache?: Set<string>,\n): Set<string> {\n const collected = _cache ?? new Set<string>();\n\n if (isPredicate(value)) {\n collected.add(value.predicate);\n } else if (value && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (const item in value) {\n collectPredicates(item, collected);\n }\n value.map((v: any) => collectPredicates(v, collected));\n } else {\n // Assume plain non-array object.\n for (const v of Object.values(value)) {\n collectPredicates(v, collected);\n }\n }\n }\n\n return collected;\n}\n\n\n/**\n * Returns an object changeset to update CR with new given proposal items.\n * Only applicable to CR at draft edit stage.\n */\nexport function updateCRObjectChangeset(\n /**\n * Change request data.\n */\n cr: Drafted | ReturnedForClarificationByManager | ReturnedForClarificationByControlBody,\n\n /**\n * Proposals by item path.\n * Will be merged with those already existing in `cr`.\n * If a proposal is undefined, it will be removed.\n */\n proposalItems: Record<string, ChangeProposal | null>,\n\n /**\n * New item data must be provided for additions and clarifications,\n * keyed by item path.\n */\n itemData: Record<string, RegisterItem<any>> = {},\n): ObjectChangeset {\n const changeset: ObjectChangeset = {};\n const newItems = { ...cr.items };\n for (const [itemPath, proposal] of Object.entries(proposalItems)) {\n // Update proposals on CR\n if (proposal !== null) {\n newItems[itemPath] = proposal;\n } else if (newItems[itemPath]) {\n delete newItems[itemPath];\n }\n // Add/remove item data\n if (proposal?.type === 'addition' || proposal?.type === 'clarification') {\n const proposedItemData = itemData[itemPath];\n if (proposedItemData === null || !isRegisterItem(proposedItemData)) {\n console.error(\"Unable to convert proposals to object changeset: original item data is missing\", itemPath);\n throw new Error(\"Unable to convert proposals to object changeset: original item data is missing\");\n }\n changeset[itemPathInCR(itemPath, cr.id)] = {\n // When editing a draft, we don’t care\n // about overwriting proposed item data so we omit oldValue.\n newValue: proposedItemData,\n };\n } else {\n changeset[itemPathInCR(itemPath, cr.id)] = {\n // When editing a draft, we don’t care\n // about overwriting proposed item data so we omit oldValue.\n newValue: null,\n };\n }\n }\n // Update main CR data\n const crPath = crIDToCRPath(cr.id);\n changeset[crPath] = {\n oldValue: cr,\n newValue: { ...cr, items: newItems, timeEdited: new Date() },\n };\n return changeset;\n}\n\n\n/**\n * Given change proposals, returns applicable changes\n * to objects in the dataset.\n */\nexport async function proposalsToObjectChangeset(\n crID: string,\n hasSubregisters: boolean,\n proposals: ProposalSet,\n itemData: Record<string, RegisterItem<any> | null>,\n newItemData: Record<string, RegisterItem<any> | null>,\n): Promise<ObjectChangeset> {\n const cs: ObjectChangeset = {};\n\n for (const [itemPath, proposal] of Object.entries(proposals)) {\n //const originalItem: RegisterItem<any> | undefined = (itemData[itemPath] ?? undefined);\n const itemRef = itemPathToItemRef(hasSubregisters, itemPath);\n\n if (proposal.type !== 'addition') {\n if (itemData[itemPath] === undefined) {\n console.error(\"Unable to convert proposals to object changeset: original item data is missing\", itemPath);\n throw new Error(\"Unable to convert proposals to object changeset: original item data is missing\");\n }\n if (proposal.type === 'amendment' && proposal.amendmentType === 'supersession') {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n } else {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n }\n } else {\n Object.assign(cs, await proposalToObjectChangeset(crID, proposal, itemRef, itemPath, itemData, newItemData));\n }\n }\n\n return cs;\n}\n\n// TODO: Refactor out the business logic of proposal approval.\n/**\n * Given a change proposal, returns applicable changes\n * to objects in the dataset.\n * Core logic of approving a proposal.\n * Takes a proposal and extra options (depending on proposal type).\n * Returns a Changeset containing register items at appropriate paths.\n */\nasync function proposalToObjectChangeset(\n crID: string,\n proposal: ChangeProposal,\n itemRef: InternalItemReference,\n itemPath: string,\n itemData: Record<string, RegisterItem<any> | null>,\n newItemData: Record<string, RegisterItem<any> | null>,\n): Promise<Changeset<Change<RegisterItem<any>>>> {\n let updatedItem: RegisterItem<any>;\n const changeset: Changeset<Change<RegisterItem<any>>> = {};\n\n const origItem = itemData[itemPath] ?? null;\n const newItem = newItemData[itemPathInCR(itemPath, crID)] ?? null;\n\n if (proposal.type !== 'addition') {\n if (origItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires original item data for non-additions\");\n }\n\n updatedItem = { ...origItem };\n\n switch (proposal.type) {\n case 'clarification':\n if (newItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires new item data for clarifications\");\n }\n //const clarification = proposal as Clarification;\n updatedItem.data = newItem.data //clarification.payload;\n break;\n case 'amendment':\n const amendment = proposal as Amendment;\n updatedItem.amendedInCR = crID;\n\n switch (amendment.amendmentType) {\n case 'retirement':\n updatedItem.status = 'retired';\n break;\n case 'invalidation':\n updatedItem.status = 'invalid';\n break;\n case 'supersession':\n const supersession = proposal as Supersession;\n updatedItem.status = 'superseded';\n updatedItem.supersededBy = supersession.supersedingItemIDs.map(itemID => ({\n itemID,\n classID: itemRef.classID,\n subregisterID: itemRef.subregisterID,\n }));\n for (const supersedingItemPath of updatedItem.supersededBy.map(ip => itemRefToItemPath(ip))) {\n const supersedingItemData = itemData[supersedingItemPath];\n if (supersedingItemData) {\n changeset[supersedingItemPath] = {\n oldValue: supersedingItemData,\n newValue: {\n ...supersedingItemData,\n supersedes: [ ...(supersedingItemData.supersedes ?? []), itemRef ],\n },\n };\n }\n }\n break;\n }\n break;\n }\n } else {\n if (newItem === null) {\n throw new Error(\"proposalToObjectChangeset() requires new item data for additions\");\n }\n updatedItem = {\n id: itemRef.itemID,\n data: newItem.data,\n status: 'valid',\n dateAccepted: new Date(),\n };\n }\n\n changeset[itemPath] = {\n oldValue: origItem,\n newValue: updatedItem,\n };\n\n return changeset;\n}\n"]}
|
|
@@ -22,7 +22,11 @@ function criteriaGroupToQueryExpression(cg) {
|
|
|
22
22
|
exps.push(`${criteriaGroupToQueryExpression(c)}`);
|
|
23
23
|
}
|
|
24
24
|
} else {
|
|
25
|
-
|
|
25
|
+
if (c.query.trim() !== '') {
|
|
26
|
+
exps.push(c.query.trim());
|
|
27
|
+
} else {
|
|
28
|
+
console.warn("Empty query when processing criteria group", c);
|
|
29
|
+
}
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
32
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteriaGroupToQueryExpression.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaGroupToQueryExpression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAE,MAAM,UAAU,CAAC;AAG/D;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,EAAiB;IACtE,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,8BAA8B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACrD;iBAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACnD;SACF;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"criteriaGroupToQueryExpression.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaGroupToQueryExpression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAE,MAAM,UAAU,CAAC;AAG/D;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,EAAiB;IACtE,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAC3B,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,IAAI,CAAC,IAAI,8BAA8B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACrD;iBAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACnD;SACF;aAAM;YACL,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;aAC3B;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,CAAC,CAAC,CAAC;aAC/D;SACF;KACF;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,GAAG,MAAM,CAAC;KACjB;SAAM;QACL,QAAQ,EAAE,CAAC,OAAO,EAAE;YAClB,KAAK,KAAK;gBACR,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1D,MAAM;SACT;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { type CriteriaGroup, isCriteriaGroup } from './models';\n\n\n/**\n * Given a CriteriaGroup,\n * returns a query expression suitable for use with filtered object indexes..\n */\nexport default function criteriaGroupToQueryExpression(cg: CriteriaGroup): string {\n const exps: string[] = [];\n\n for (const c of cg.criteria) {\n if (isCriteriaGroup(c)) {\n if (c.criteria.length > 1) {\n exps.push(`(${criteriaGroupToQueryExpression(c)})`);\n } else if (c.criteria.length > 0) {\n exps.push(`${criteriaGroupToQueryExpression(c)}`);\n }\n } else {\n if (c.query.trim() !== '') {\n exps.push(c.query.trim());\n } else {\n console.warn(\"Empty query when processing criteria group\", c);\n }\n }\n }\n\n let result: string;\n if (exps.length < 1) {\n result = 'true';\n } else {\n switch (cg.require) {\n case 'all':\n result = exps.join(' && ');\n break;\n case 'any':\n result = exps.join(' || ');\n break;\n case 'none':\n result = exps.map(exp => `${exp} === false`).join(' && ');\n break;\n }\n }\n\n return result;\n}\n"]}
|
|
@@ -38,8 +38,7 @@ const CriteriaTree = function ({
|
|
|
38
38
|
(0, _react2.useEffect)(() => {
|
|
39
39
|
updateCriteria(criteria);
|
|
40
40
|
}, [JSON.stringify(criteria)]);
|
|
41
|
-
|
|
42
|
-
function onAddGroup(parent) {
|
|
41
|
+
const onAddGroup = (0, _react2.useCallback)(function (parent) {
|
|
43
42
|
const p = reverseArray(parent);
|
|
44
43
|
var newCriteria = JSON.parse(JSON.stringify([crit]));
|
|
45
44
|
const newGroup = (0, _models.makeBlankCriteria)();
|
|
@@ -49,9 +48,8 @@ const CriteriaTree = function ({
|
|
|
49
48
|
});
|
|
50
49
|
updateCriteria(newCriteria[0]);
|
|
51
50
|
onChange(newCriteria[0]);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function onDelete(parent, idx) {
|
|
51
|
+
}, [crit, updateCriteria, onChange]);
|
|
52
|
+
const onDelete = (0, _react2.useCallback)(function (parent, idx) {
|
|
55
53
|
const p = reverseArray(parent);
|
|
56
54
|
var newCriteria = JSON.parse(JSON.stringify([crit]));
|
|
57
55
|
(0, _mutateGroup.default)(newCriteria, p, {
|
|
@@ -60,9 +58,8 @@ const CriteriaTree = function ({
|
|
|
60
58
|
});
|
|
61
59
|
updateCriteria(newCriteria[0]);
|
|
62
60
|
onChange(newCriteria[0]);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function onEditItem(parent, idx, newItem, commit) {
|
|
61
|
+
}, [crit, updateCriteria, onChange]);
|
|
62
|
+
const onEditItem = (0, _react2.useCallback)(function (parent, idx, newItem, commit) {
|
|
66
63
|
const p = reverseArray(parent);
|
|
67
64
|
var newCriteria = JSON.parse(JSON.stringify([crit]));
|
|
68
65
|
(0, _mutateGroup.default)(newCriteria, p, {
|
|
@@ -75,8 +72,7 @@ const CriteriaTree = function ({
|
|
|
75
72
|
if (commit) {
|
|
76
73
|
onChange(newCriteria[0]);
|
|
77
74
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
75
|
+
}, [onChange, updateCriteria, crit]);
|
|
80
76
|
const nodes = (0, _react2.useMemo)(() => (0, _criteriaToNodes.default)([crit], {
|
|
81
77
|
onEditItem: onChange ? onEditItem : undefined,
|
|
82
78
|
onAddGroup: onChange ? onAddGroup : undefined,
|
|
@@ -84,15 +80,15 @@ const CriteriaTree = function ({
|
|
|
84
80
|
itemClasses,
|
|
85
81
|
subregisters,
|
|
86
82
|
availableClassIDs
|
|
87
|
-
}), [crit, onChange]);
|
|
83
|
+
}), [itemClasses, subregisters, availableClassIDs, crit, onChange, onEditItem, onAddGroup, onDelete]);
|
|
88
84
|
const implied = (0, _react2.useMemo)(() => impliedCriteria !== undefined ? (0, _criteriaToNodes.default)([impliedCriteria], {
|
|
89
85
|
implied: true,
|
|
90
86
|
itemClasses,
|
|
91
87
|
subregisters,
|
|
92
88
|
availableClassIDs
|
|
93
|
-
}) : [], [impliedCriteria]);
|
|
89
|
+
}) : [], [impliedCriteria, itemClasses, availableClassIDs, subregisters]);
|
|
94
90
|
return (0, _react.jsx)(_core.Tree, {
|
|
95
|
-
contents: [...implied, ...nodes],
|
|
91
|
+
contents: (0, _react2.useMemo)(() => [...implied, ...nodes], [implied, nodes]),
|
|
96
92
|
className: className,
|
|
97
93
|
css: (0, _react.css)`
|
|
98
94
|
.bp4-tree-node-content { height: unset; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx, css } from '@emotion/react';\nimport React, { useEffect, useState, useCallback, useMemo } from 'react';\nimport { Button, ButtonGroup, type TreeNodeInfo, Tree } from '@blueprintjs/core';\nimport type { ItemClassConfigurationSet, Subregisters } from '../../types';\nimport { type CriteriaGroup, makeBlankCriteria, type Criterion, type CompositionOperator, COMPOSITION_OPERATORS } from './models';\nimport mutateGroup from './mutateGroup';\nimport criteriaToNodes from './criteriaToNodes';\n\n\nexport const SUBREGISTER_PATH_PREFIX = '/subregisters/';\n\n\ninterface CriteriaTreeProps {\n impliedCriteria?: CriteriaGroup\n criteria: CriteriaGroup\n onChange?: (criteria: CriteriaGroup) => void\n className?: string\n availableClassIDs: string[]\n\n // TODO: move to context\n itemClasses: ItemClassConfigurationSet\n subregisters?: Subregisters\n}\n\n\nexport const CriteriaTree: React.FC<CriteriaTreeProps> =\nfunction ({ criteria, impliedCriteria, onChange, availableClassIDs, itemClasses, subregisters, className }) {\n const [crit, updateCriteria] = useState<CriteriaGroup>(criteria);\n\n useEffect(() => {\n updateCriteria(criteria);\n }, [JSON.stringify(criteria)]);\n\n const onAddGroup = useCallback(function (parent: number[]) {\n const p = reverseArray(parent);\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n const newGroup: CriteriaGroup = makeBlankCriteria();\n mutateGroup(newCriteria, p, { action: 'insert', item: newGroup });\n updateCriteria(newCriteria[0]);\n onChange!(newCriteria[0]);\n }, [crit, updateCriteria, onChange]);\n\n const onDelete = useCallback(function (parent: number[], idx: number) {\n const p = reverseArray(parent);\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n mutateGroup(newCriteria, p, { action: 'delete', idx });\n updateCriteria(newCriteria[0]);\n onChange!(newCriteria[0]);\n }, [crit, updateCriteria, onChange]);\n\n const onEditItem = useCallback(function (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) {\n const p = reverseArray(parent);\n var newCriteria = JSON.parse(JSON.stringify([crit]));\n mutateGroup(newCriteria, p, { action: 'edit', idx, item: newItem });\n updateCriteria(newCriteria[0]);\n if (commit) {\n onChange!(newCriteria[0]);\n }\n }, [onChange, updateCriteria, crit]);\n\n const nodes: TreeNodeInfo[] = useMemo(() => criteriaToNodes([crit], {\n onEditItem: onChange ? onEditItem : undefined,\n onAddGroup: onChange ? onAddGroup : undefined,\n onDeleteItem: onChange ? onDelete : undefined,\n itemClasses,\n subregisters,\n availableClassIDs,\n }), [itemClasses, subregisters, availableClassIDs, crit, onChange, onEditItem, onAddGroup, onDelete]);\n\n const implied: TreeNodeInfo[] = useMemo((() =>\n impliedCriteria !== undefined\n ? criteriaToNodes([impliedCriteria], {\n implied: true,\n itemClasses,\n subregisters,\n availableClassIDs,\n })\n : []\n ), [impliedCriteria, itemClasses, availableClassIDs, subregisters]);\n\n return (\n <Tree\n contents={useMemo(() => [ ...implied, ...nodes ], [implied, nodes])}\n className={className}\n css={css`\n .bp4-tree-node-content { height: unset; }\n .bp4-tree-node-label { overflow: unset; }\n .bp4-tree-node-caret, .bp4-tree-node-caret-none { display: none; }\n `}\n />\n );\n}\n\nexport default CriteriaTree;\n\n\n/* Displaying criteria group labels */\n\ninterface CriteriaGroupLabelProps {\n criteriaGroup: CriteriaGroup\n onUpdate?: (op: CompositionOperator) => void\n className?: string\n}\nexport const CriteriaGroupLabel: React.FC<CriteriaGroupLabelProps> =\nfunction ({ criteriaGroup, onUpdate, className }) {\n return <div className={className}>\n {onUpdate\n ? <ButtonGroup>\n {COMPOSITION_OPERATORS.map(op =>\n <Button\n key={op}\n small\n onClick={() => onUpdate ? onUpdate(op) : void 0}\n active={criteriaGroup.require === op}>\n {op}\n </Button>\n )}\n </ButtonGroup>\n : <strong>{criteriaGroup.require}</strong>}\n {\" \"}\n of:\n </div>;\n}\n\n\nfunction reverseArray<T>(arr: T[]): T[] {\n var copy = JSON.parse(JSON.stringify(arr));\n copy.reverse();\n return copy;\n}\n"]}
|
package/views/SearchQuery.js
CHANGED
|
@@ -43,7 +43,7 @@ const SearchQuery = (0, _react.memo)(function ({
|
|
|
43
43
|
getQuickSearchPredicate
|
|
44
44
|
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
45
45
|
const [editingAdvanced, toggleEditingAdvanced] = (0, _react.useState)(false);
|
|
46
|
-
const classIDs =
|
|
46
|
+
const classIDs = (0, _react.useMemo)(() => availableClassIDs === undefined ? Object.keys(itemClasses) : availableClassIDs, [availableClassIDs, itemClasses]);
|
|
47
47
|
const hasAdvancedQuery = rootCriteria.criteria.length > 0;
|
|
48
48
|
const makeDefaultCriteria = (0, _react.useCallback)(function makeDefaultCriteria() {
|
|
49
49
|
if (quickSearchString) {
|
package/views/SearchQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useMemo, useEffect, useRef, useState, useContext, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, ControlGroup, Colors, InputGroup, Tag, ButtonGroup } from '@blueprintjs/core';\nimport CriteriaTree from './FilterCriteria';\nimport { CUSTOM_CONDITION, RAW_SUBSTRING } from './FilterCriteria/CRITERIA_CONFIGURATION';\nimport { CriteriaGroup, Criterion } from './FilterCriteria/models';\nimport criteriaGroupToQueryExpression from './FilterCriteria/criteriaGroupToQueryExpression';\n//import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';\nimport { BrowserCtx } from './BrowserCtx';\n\n\nconst SearchQuery: React.FC<{\n rootCriteria: CriteriaGroup;\n onCriteriaChange?: (rootCriteria: CriteriaGroup) => void;\n\n quickSearchString: string;\n onQuickSearchStringChange?: (searchString: string) => void;\n\n availableClassIDs?: string[];\n className?: string;\n}> = memo(function ({\n rootCriteria,\n onCriteriaChange,\n quickSearchString,\n onQuickSearchStringChange,\n availableClassIDs,\n className,\n}) {\n const { itemClasses, subregisters, getQuickSearchPredicate } = useContext(BrowserCtx);\n\n const [ editingAdvanced, toggleEditingAdvanced ] = useState<boolean>(false);\n\n const classIDs = useMemo(\n (() =>\n availableClassIDs === undefined\n ? Object.keys(itemClasses)\n : availableClassIDs\n ),\n [availableClassIDs, itemClasses]);\n\n const hasAdvancedQuery = rootCriteria.criteria.length > 0;\n\n const makeDefaultCriteria = useCallback(function makeDefaultCriteria(): Criterion {\n if (quickSearchString) {\n if (getQuickSearchPredicate) {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: getQuickSearchPredicate(quickSearchString) },\n { itemClasses, subregisters },\n ),\n }\n } else {\n return {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters },\n ),\n }\n }\n } else {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: 'false' },\n { itemClasses, subregisters },\n ),\n }\n }\n }, [quickSearchString, getQuickSearchPredicate, itemClasses, subregisters]);\n\n const quickSearchIsEnabled = onQuickSearchStringChange && !hasAdvancedQuery;\n const quickSearchInputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n if (quickSearchIsEnabled && quickSearchInputRef.current) {\n quickSearchInputRef.current.focus();\n }\n }, []);\n\n return (\n <ControlGroup fill vertical className={className}>\n <InputGroup\n fill\n inputRef={quickSearchInputRef}\n disabled={!quickSearchIsEnabled}\n value={hasAdvancedQuery ? '' : quickSearchString}\n leftIcon=\"search\"\n placeholder=\"Quick search\"\n title={!hasAdvancedQuery\n ? \"Searching common item attributes (such as names, descriptions, identifiers).\"\n : \"Advanced query overrides quick search. Remove advanced query to re-enable.\"}\n css={css`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`}\n rightElement={<Button\n disabled={!onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery}\n onClick={() => onQuickSearchStringChange?.('')}\n small\n minimal\n icon=\"cross\"\n title=\"Clear quick search\"\n />}\n onChange={evt => onQuickSearchStringChange?.(evt.currentTarget.value)}\n />\n <ButtonGroup fill>\n <Button\n fill\n small\n minimal\n title=\"Edit advanced search query\"\n icon='filter'\n onClick={!hasAdvancedQuery\n ? (() => {\n onCriteriaChange!({ criteria: [makeDefaultCriteria()], require: 'all' });\n toggleEditingAdvanced(true);\n })\n : () => toggleEditingAdvanced(v => !v)}\n active={editingAdvanced && hasAdvancedQuery}\n disabled={!hasAdvancedQuery && !onCriteriaChange}\n rightIcon={rootCriteria.criteria.length > 0\n ? <Tag intent=\"success\" round>on</Tag>\n : <Tag round>off</Tag>}>\n Advanced\n </Button>\n </ButtonGroup>\n {hasAdvancedQuery && editingAdvanced\n ? <>\n <CriteriaTree\n key=\"tree\"\n criteria={rootCriteria}\n onChange={onCriteriaChange}\n itemClasses={itemClasses}\n availableClassIDs={classIDs}\n subregisters={subregisters}\n css={css`max-height: 50vh; overflow-y: auto;`}\n />\n <div\n key=\"query\"\n css={css`\n margin-top: 5px;\n padding: 0 10px 10px 10px;\n color: ${Colors.GRAY3};\n font-size: 90%;\n overflow-wrap: break-word;\n `}>\n Query used: <code>{criteriaGroupToQueryExpression(rootCriteria)}</code>\n </div>\n </>\n : null}\n </ControlGroup>\n );\n});\n\nexport default SearchQuery;\n"]}
|
|
@@ -46,7 +46,6 @@ const RegisterHome2 = function () {
|
|
|
46
46
|
}, (0, _react2.jsx)("p", null, "Search all items:"), (0, _react2.jsx)(_Search.default, {
|
|
47
47
|
css: (0, _react2.css)`flex: 1; overflow: hidden;`,
|
|
48
48
|
//style={{ height: '100vh', width: '50vw', minWidth: '500px', maxWidth: '90vw' }}
|
|
49
|
-
availableClassIDs: [],
|
|
50
49
|
stateName: "item-search-home",
|
|
51
50
|
initialView: (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)("div", {
|
|
52
51
|
dangerouslySetInnerHTML: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome2/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,aAAa,GAAsD;;IACvE,MAAM,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACxD,OAAO,CACL,IAAC,qBAAqB,IAAC,KAAK,EAAE;2BAAc,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,mCAAI,eAAe,CAAI;QACvF,IAAC,IAAI,IAAC,GAAG,EAAE,GAAG,CAAA,qIAAqI;YACjJ,mCAEI;YACJ,IAAC,MAAM,IACL,GAAG,EAAE,GAAG,CAAA,4BAA4B;gBACpC,iFAAiF;gBACjF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome2/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,aAAa,GAAsD;;IACvE,MAAM,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACxD,OAAO,CACL,IAAC,qBAAqB,IAAC,KAAK,EAAE;2BAAc,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,mCAAI,eAAe,CAAI;QACvF,IAAC,IAAI,IAAC,GAAG,EAAE,GAAG,CAAA,qIAAqI;YACjJ,mCAEI;YACJ,IAAC,MAAM,IACL,GAAG,EAAE,GAAG,CAAA,4BAA4B;gBACpC,iFAAiF;gBACjF,SAAS,EAAC,kBAAkB,EAC5B,WAAW,EAAE;oBACX,aAAK,uBAAuB,EAAE,EAAE,MAAM,EACpC,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,cAAc,mCAC7B,mDAAmD;yBACvD,GAAI;oBACL,IAAC,MAAM,IACH,GAAG,EAAE,GAAG,CAAA,6CAA6C,EACrD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,6BAE3C,CACR,EACH,eAAe,EACb,IAAC,aAAa,IACZ,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,2BAA2B,GACjC,GACJ,CACG,CACe,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { NonIdealState, Button, Card } from '@blueprintjs/core';\n\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\n\nimport { TabContentsWithHeader } from '../../util';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport Search from '../../sidebar/Search';\nimport { Protocols } from '../../protocolRegistry';\n\n\nconst RegisterHome2: React.VoidFunctionComponent<Record<never, never>> = function () {\n const { registerMetadata } = useContext(BrowserCtx);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n return (\n <TabContentsWithHeader title={<>Welcome to {registerMetadata?.name ?? 'this register'}</>}>\n <Card css={css`flex: 1; box-shadow: none !important; position: absolute; border-radius: 0; display: flex; flex-flow: column nowrap; padding: 10px;`}>\n <p>\n Search all items:\n </p>\n <Search\n css={css`flex: 1; overflow: hidden;`}\n //style={{ height: '100vh', width: '50vw', minWidth: '500px', maxWidth: '90vw' }}\n stateName=\"item-search-home\"\n initialView={<>\n <div dangerouslySetInnerHTML={{ __html:\n registerMetadata?.contentSummary\n ?? \"There is no content summary of this registry yet.\"\n }} />\n <Button\n css={css`vertical-align: baseline; margin-top: .5em;`}\n onClick={() => spawnTab(Protocols.REGISTER_META)}>\n View register metadata\n </Button>\n </>}\n zeroResultsView={\n <NonIdealState\n icon=\"clean\"\n title=\"No results matching query\"\n />}\n />\n </Card>\n </TabContentsWithHeader>\n );\n};\n\nexport default RegisterHome2;\n"]}
|
|
@@ -154,7 +154,7 @@ const Search = (0, _react.memo)(function ({
|
|
|
154
154
|
}, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters, getQuickSearchPredicate]);
|
|
155
155
|
const stateRecalledDebounced = (0, _useDebounce.default)(stateRecalled, 100);
|
|
156
156
|
const queryExpressionDebounced = (0, _useDebounce.default)(effectiveQueryExpression, stateRecalledDebounced ? 500 : 0);
|
|
157
|
-
const datasetObjectSearchQueryExpression = (0, _react.useMemo)(() => queryExpressionDebounced != 'false' ? (0, _itemQueryUtils.getRegisterItemQuery)(queryExpressionDebounced, changeRequest !== null && changeRequest !== void 0 ? changeRequest : undefined) : 'return false', [queryExpressionDebounced, changeRequest]);
|
|
157
|
+
const datasetObjectSearchQueryExpression = (0, _react.useMemo)(() => queryExpressionDebounced.trim() !== '' && queryExpressionDebounced != 'false' ? (0, _itemQueryUtils.getRegisterItemQuery)(queryExpressionDebounced, changeRequest !== null && changeRequest !== void 0 ? changeRequest : undefined) : 'return false', [queryExpressionDebounced, changeRequest]);
|
|
158
158
|
const handleSelectItem = (0, _react.useCallback)(itemPath => dispatch({
|
|
159
159
|
type: 'select-item',
|
|
160
160
|
payload: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Search/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,OAAO,oBAAoB,MAAM,2DAA2D,CAAC;AAC7F,OAAO,WAAW,MAAM,8CAA8C,CAAC;AACvE,OAAO,EAAsB,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,8BAA8B,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAcnD,SAAS,OAAO,CAAC,GAAQ;IACvB,OAAO,GAAG;WACL,GAAG,CAAC,KAAK;WACT,GAAG,CAAC,KAAK,CAAC,QAAQ;WAClB,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;WACnC,OAAO,GAAG,CAAC,mBAAmB,KAAK,QAAQ;WAC3C,CAAC,GAAG,CAAC,gBAAgB,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAA;AAClF,CAAC;AAMD,MAAM,YAAY,GAAU;IAC1B,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE;IACnC,mBAAmB,EAAE,EAAE;IACvB,gBAAgB,EAAE,IAAI;CACd,CAAC;AAEX,SAAS,cAAc,CAAC,KAAY;IAClC,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,OAAO,CAAC,SAAgB,EAAE,MAAc;IAC/C,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB,KAAK,cAAc;YACjB,OAAO;gBACL,GAAG,SAAS;gBACZ,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK;aAC5B,CAAC;QACJ,KAAK,8BAA8B;YACjC,OAAO;gBACL,GAAG,SAAS;gBACZ,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;aAC9C,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO;gBACL,GAAG,SAAS;gBACZ,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;aAC1C,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC9C;AACH,CAAC;AAED,MAAM,MAAM,GAsBZ,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;IAC5I,MAAM,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAExE,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,4BAA4B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpF,MAAM;IACJ,+BAA+B;IAC/B,aAAa,EACb,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,MAAM,GACP,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE3B,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAE3D,MAAM,CAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAE,GAAI,gCAA8E,CAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,gBAAgB,EACvJ,SAAS,EACT,OAAO,EACP,OAAO,EACP,YAAY,EACZ,IAAI,CAAC,CAAC;IAER,MAAM,gBAAgB,GAAG,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,GAAG;QAChD,CAAC,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,EAAE,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC;IAET,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB,EAAE;YACpB,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;SAC5E;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEjC,iFAAiF;IACjF,MAAM,wBAAwB,GAAW,OAAO,CAAC,GAAG,EAAE;;QACpD,MAAM,iBAAiB,GAAG,CAAC,MAAA,KAAK,CAAC,mBAAmB,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,gBAAgB,GACpB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,KAAK,EAAE;YAClE,CAAC,CAAC;gBACE,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR,uBAAuB;wBACrB,CAAC,CAAC;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAC7B,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,EAChE,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;yBACF;wBACH,CAAC,CAAC;4BACE,GAAG,EAAE,eAAe;4BACpB,KAAK,EAAE,aAAa,CAAC,OAAO,CAC1B,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAChC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;yBACjC;iBACN;aACF;YACH,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3B,MAAM,YAAY,GAAkB,gBAAgB;YAClD,CAAC,CAAC;gBACE,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,CAAE,gBAAgB,EAAE,gBAAgB,CAAE;aACjD;YACH,CAAC,CAAC,gBAAgB,CAAC;QACrB,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,CAAC,8BAA8B,CAAC,YAAY,CAAC;YAC9C,2DAA2D;YAC3D,CAAC,CAAC,OAAO,CAAC;IACd,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE1G,MAAM,sBAAsB,GAAG,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,wBAAwB,GAAG,WAAW,CAC1C,wBAAwB,EACxB,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACjC,CAAC;IAEF,MAAM,kCAAkC,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CACvD,wBAAwB,IAAI,OAAO;QACjC,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,SAAS,CAAC;QAC5E,CAAC,CAAC,cAAc,CACnB,EAAE,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9C,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAC,CAAC,CAAC,EACrE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEd,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,GAAG,SAAS,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC,CAAC,EAC/D,CAAC,MAAM,CAAC,CAAC,CAAC;IACZ,MAAM,cAAc,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,qBAAqB,CAAC;IAE3D,MAAM,iBAAiB,GAAG,WAAW,IAAI,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9F,OAAO,CACL,aAAK,GAAG,EAAE,GAAG,CAAA,0CAA0C,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;QACzF,IAAC,WAAW,IACV,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAClC,iBAAiB,EAAE,KAAK,CAAC,mBAAmB,EAC5C,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,WAAW,CAAC,CAC5B,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACjF,EAAE,CAAC,QAAQ,CAAC,CAAC,EACd,yBAAyB,EAAE,WAAW,CAAC,CACrC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CACxF,EAAE,CAAC,QAAQ,CAAC,CAAC,EACd,GAAG,EAAE,GAAG,CAAA,eAAe,GACvB;QACF,aAAK,GAAG,EAAE,GAAG,CAAA,4BAA4B,IACtC,iBAAiB;YAChB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,IAAC,aAAa,IACZ,eAAe,EAAE,kCAAkC,EACnD,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,YAAY,EAAE,gBAAgB,EAC9B,UAAU,EAAE,cAAc,EAC1B,iBAAiB,EAAE,SAAgB,EACnC,eAAe,EAAE,wBAAwB,KAAK,wBAAwB;oBACpE,CAAC,CAAC,eAAe;oBACjB,CAAC,CAAC,SAAS,GACb,CACF,CACF,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAGH,MAAM,4BAA4B,GAAG,oBAAoB,CAAoB,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnG,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE;QACT,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,oBAAoB,OAAO,EAAE;KACzC;CACF,CAAC,CAAC,CAAC;AAGJ,eAAe,MAAM,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { toJSONNormalized } from '@riboseinc/paneron-extension-kit/util';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport useDebounce from '@riboseinc/paneron-extension-kit/useDebounce';\nimport { type CriteriaGroup, isCriteriaGroup, BLANK_CRITERIA } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport { RAW_SUBSTRING, CUSTOM_CONDITION } from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { ChangeRequestContext } from '../../../proposals/ChangeRequestContext';\nimport type { RegisterItem } from '../../../types';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport SearchQuery from '../../SearchQuery';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\n// TODO: Move Search widget core out of sidebar, as it’s used elsewhere too.\n\n\ninterface Query {\n criteria: CriteriaGroup;\n}\ninterface State {\n query: Query;\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\nfunction isState(val: any): val is State {\n return val\n && val.query\n && val.query.criteria\n && isCriteriaGroup(val.query.criteria)\n && typeof val.quickSubstringQuery === 'string'\n && (val.selectedItemPath === null || typeof val.selectedItemPath === 'string')\n}\ntype Action =\n | { type: 'update-query'; payload: { query: Query; }; }\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\n} as const;\n\nfunction isInitialState(state: State): boolean {\n return toJSONNormalized(state) === toJSONNormalized(initialState);\n}\n\nfunction reducer(prevState: State, action: Action) {\n switch (action.type) {\n case 'update-query':\n return {\n ...prevState,\n query: action.payload.query,\n };\n case 'update-quick-substring-query':\n return {\n ...prevState,\n quickSubstringQuery: action.payload.substring,\n };\n case 'select-item':\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n default:\n throw new Error(\"Unexpected search state\");\n }\n}\n\nconst Search: React.FC<{\n /**\n * Criteria that will always apply.\n * Used e.g. in superseding item selection\n * (to limit to the same item class).\n */\n implicitCriteria?: CriteriaGroup,\n\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n\n zeroResultsView?: JSX.Element\n initialView?: JSX.Element\n\n stateName?: string\n\n List?: ReturnType<typeof makeSearchResultList>\n extraData?: Record<string, any>\n\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ implicitCriteria, initialView, zeroResultsView, availableClassIDs, stateName, onOpenItem, List, extraData, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n\n const ListComponent = useMemo((() => List ?? RegisterItemSearchResultList), [List]);\n\n const {\n // TODO: defaultSearchCriteria,\n keyExpression,\n getQuickSearchPredicate,\n itemClasses,\n subregisters,\n selectedRegisterItem,\n jumpTo,\n } = useContext(BrowserCtx);\n\n const { changeRequest } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, stateRecalled ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)( stateName ?? 'search-sidebar',\n undefined,\n isState,\n reducer,\n initialState,\n null);\n\n const selectedItemPath = selectedRegisterItem?.ref\n ? itemRefToItemPath(selectedRegisterItem.ref, changeRequest?.id)\n : null;\n\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n // Why are we memoing this? It’s just a string and seems not too slow to compute.\n const effectiveQueryExpression: string = useMemo(() => {\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n const withSearchString: CriteriaGroup =\n state.query.criteria.criteria.length < 1 && quickSearchString !== ''\n ? {\n require: 'all',\n criteria: [\n getQuickSearchPredicate\n ? {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: getQuickSearchPredicate(quickSearchString) },\n { itemClasses, subregisters },\n ),\n }\n : {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters }),\n },\n ],\n }\n : state.query.criteria;\n const withImplicit: CriteriaGroup = implicitCriteria\n ? {\n require: 'all',\n criteria: [ implicitCriteria, withSearchString ],\n }\n : withSearchString;\n return withImplicit.criteria.length > 0\n ? criteriaGroupToQueryExpression(withImplicit)\n // If no criteria provided, don’t show anything by default.\n : 'false';\n }, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters, getQuickSearchPredicate]);\n\n const stateRecalledDebounced = useDebounce(stateRecalled, 100);\n const queryExpressionDebounced = useDebounce(\n effectiveQueryExpression,\n stateRecalledDebounced ? 500 : 0,\n );\n\n const datasetObjectSearchQueryExpression = useMemo((() =>\n queryExpressionDebounced != 'false'\n ? getRegisterItemQuery(queryExpressionDebounced, changeRequest ?? undefined)\n : 'return false'\n ), [queryExpressionDebounced, changeRequest]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n\n const defaultHandleOpenItem = useCallback(\n (itemPath => jumpTo?.(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [jumpTo]);\n const handleOpenItem = onOpenItem ?? defaultHandleOpenItem;\n\n const showInitialScreen = initialView && isInitialState({ ...state, selectedItemPath: null });\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <SearchQuery\n rootCriteria={state.query.criteria}\n quickSearchString={state.quickSubstringQuery}\n availableClassIDs={availableClassIDs}\n onCriteriaChange={useCallback((\n criteria => dispatch({ type: 'update-query', payload: { query: { criteria } } })\n ), [dispatch])}\n onQuickSearchStringChange={useCallback((\n substring => dispatch({ type: 'update-quick-substring-query', payload: { substring } })\n ), [dispatch])}\n css={css`padding: 2px;`}\n />\n <div css={css`flex: 1; overflow-y: auto;`}>\n {showInitialScreen\n ? initialView\n : <ListComponent\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n extraItemViewData={extraData as any}\n zeroResultsView={effectiveQueryExpression === queryExpressionDebounced\n ? zeroResultsView\n : undefined}\n />}\n </div>\n </div>\n );\n});\n\n\nconst RegisterItemSearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`,\n },\n}));\n\n\nexport default Search;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Search/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { toJSONNormalized } from '@riboseinc/paneron-extension-kit/util';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport useDebounce from '@riboseinc/paneron-extension-kit/useDebounce';\nimport { type CriteriaGroup, isCriteriaGroup, BLANK_CRITERIA } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport { RAW_SUBSTRING, CUSTOM_CONDITION } from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { ChangeRequestContext } from '../../../proposals/ChangeRequestContext';\nimport type { RegisterItem } from '../../../types';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport SearchQuery from '../../SearchQuery';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\n// TODO: Move Search widget core out of sidebar, as it’s used elsewhere too.\n\n\ninterface Query {\n criteria: CriteriaGroup;\n}\ninterface State {\n query: Query;\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\nfunction isState(val: any): val is State {\n return val\n && val.query\n && val.query.criteria\n && isCriteriaGroup(val.query.criteria)\n && typeof val.quickSubstringQuery === 'string'\n && (val.selectedItemPath === null || typeof val.selectedItemPath === 'string')\n}\ntype Action =\n | { type: 'update-query'; payload: { query: Query; }; }\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\n} as const;\n\nfunction isInitialState(state: State): boolean {\n return toJSONNormalized(state) === toJSONNormalized(initialState);\n}\n\nfunction reducer(prevState: State, action: Action) {\n switch (action.type) {\n case 'update-query':\n return {\n ...prevState,\n query: action.payload.query,\n };\n case 'update-quick-substring-query':\n return {\n ...prevState,\n quickSubstringQuery: action.payload.substring,\n };\n case 'select-item':\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n default:\n throw new Error(\"Unexpected search state\");\n }\n}\n\nconst Search: React.FC<{\n /**\n * Criteria that will always apply.\n * Used e.g. in superseding item selection\n * (to limit to the same item class).\n */\n implicitCriteria?: CriteriaGroup,\n\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n\n zeroResultsView?: JSX.Element\n initialView?: JSX.Element\n\n stateName?: string\n\n List?: ReturnType<typeof makeSearchResultList>\n extraData?: Record<string, any>\n\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ implicitCriteria, initialView, zeroResultsView, availableClassIDs, stateName, onOpenItem, List, extraData, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n\n const ListComponent = useMemo((() => List ?? RegisterItemSearchResultList), [List]);\n\n const {\n // TODO: defaultSearchCriteria,\n keyExpression,\n getQuickSearchPredicate,\n itemClasses,\n subregisters,\n selectedRegisterItem,\n jumpTo,\n } = useContext(BrowserCtx);\n\n const { changeRequest } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, stateRecalled ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)( stateName ?? 'search-sidebar',\n undefined,\n isState,\n reducer,\n initialState,\n null);\n\n const selectedItemPath = selectedRegisterItem?.ref\n ? itemRefToItemPath(selectedRegisterItem.ref, changeRequest?.id)\n : null;\n\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n // Why are we memoing this? It’s just a string and seems not too slow to compute.\n const effectiveQueryExpression: string = useMemo(() => {\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n const withSearchString: CriteriaGroup =\n state.query.criteria.criteria.length < 1 && quickSearchString !== ''\n ? {\n require: 'all',\n criteria: [\n getQuickSearchPredicate\n ? {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: getQuickSearchPredicate(quickSearchString) },\n { itemClasses, subregisters },\n ),\n }\n : {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters }),\n },\n ],\n }\n : state.query.criteria;\n const withImplicit: CriteriaGroup = implicitCriteria\n ? {\n require: 'all',\n criteria: [ implicitCriteria, withSearchString ],\n }\n : withSearchString;\n return withImplicit.criteria.length > 0\n ? criteriaGroupToQueryExpression(withImplicit)\n // If no criteria provided, don’t show anything by default.\n : 'false';\n }, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters, getQuickSearchPredicate]);\n\n const stateRecalledDebounced = useDebounce(stateRecalled, 100);\n const queryExpressionDebounced = useDebounce(\n effectiveQueryExpression,\n stateRecalledDebounced ? 500 : 0,\n );\n\n const datasetObjectSearchQueryExpression = useMemo((() =>\n queryExpressionDebounced.trim() !== '' && queryExpressionDebounced != 'false'\n ? getRegisterItemQuery(queryExpressionDebounced, changeRequest ?? undefined)\n : 'return false'\n ), [queryExpressionDebounced, changeRequest]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n\n const defaultHandleOpenItem = useCallback(\n (itemPath => jumpTo?.(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [jumpTo]);\n const handleOpenItem = onOpenItem ?? defaultHandleOpenItem;\n\n const showInitialScreen = initialView && isInitialState({ ...state, selectedItemPath: null });\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <SearchQuery\n rootCriteria={state.query.criteria}\n quickSearchString={state.quickSubstringQuery}\n availableClassIDs={availableClassIDs}\n onCriteriaChange={useCallback((\n criteria => dispatch({ type: 'update-query', payload: { query: { criteria } } })\n ), [dispatch])}\n onQuickSearchStringChange={useCallback((\n substring => dispatch({ type: 'update-quick-substring-query', payload: { substring } })\n ), [dispatch])}\n css={css`padding: 2px;`}\n />\n <div css={css`flex: 1; overflow-y: auto;`}>\n {showInitialScreen\n ? initialView\n : <ListComponent\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n extraItemViewData={extraData as any}\n zeroResultsView={effectiveQueryExpression === queryExpressionDebounced\n ? zeroResultsView\n : undefined}\n />}\n </div>\n </div>\n );\n});\n\n\nconst RegisterItemSearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`,\n },\n}));\n\n\nexport default Search;\n"]}
|