@riboseinc/paneron-registry-kit 2.2.45 → 2.2.46
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
CHANGED
package/proposals/Search.js
CHANGED
|
@@ -80,13 +80,36 @@ const ProposalSearchResultList = (0, _react.memo)(function ({
|
|
|
80
80
|
itemPaths: Object.keys(proposal.items)
|
|
81
81
|
});
|
|
82
82
|
const itemData = proposedItemDataReq.value;
|
|
83
|
-
|
|
83
|
+
let expressionParsed;
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
expressionParsed = new Function('objPath', 'obj', queryExpression);
|
|
87
|
+
} catch (e) {
|
|
88
|
+
console.error("Parsing query expression failed", e);
|
|
89
|
+
|
|
90
|
+
expressionParsed = () => false;
|
|
91
|
+
}
|
|
92
|
+
|
|
84
93
|
const predicate = (0, _react.useCallback)(([objPath, obj]) => {
|
|
85
94
|
const objPathInCR = (0, _itemPathUtils.itemPathInCR)(objPath, extraItemViewData.proposal.id);
|
|
86
|
-
|
|
95
|
+
|
|
96
|
+
try {
|
|
97
|
+
return expressionParsed(objPath, itemData[objPath]) || expressionParsed(objPath, obj) || expressionParsed(objPathInCR, itemData[objPath]) || expressionParsed(objPathInCR, obj);
|
|
98
|
+
} catch (e) {
|
|
99
|
+
console.error("Predicate failed", e);
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
87
102
|
}, [queryExpression, itemData, extraItemViewData.proposal.id]);
|
|
88
103
|
const matchingItemIDs = (0, _react.useMemo)(() => {
|
|
89
|
-
|
|
104
|
+
let keyExpressionParsed;
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
keyExpressionParsed = keyExpression ? new Function('obj', `return ${keyExpression}`) : null;
|
|
108
|
+
} catch (e) {
|
|
109
|
+
console.error("Parsing key expression failed", e);
|
|
110
|
+
keyExpressionParsed = null;
|
|
111
|
+
}
|
|
112
|
+
|
|
90
113
|
const matchingItems = Object.entries(proposal.items).filter(predicate);
|
|
91
114
|
const matchingItemsWithKeys = keyExpressionParsed && !proposedItemDataReq.isUpdating ? matchingItems.map(([p]) => {
|
|
92
115
|
try {
|
package/proposals/Search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.js","sourceRoot":"","sources":["../../src/proposals/Search.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport makeList, { type ItemProps, LabelledListIcon, type ListData } from '@riboseinc/paneron-extension-kit/widgets/List';\n\nimport type { RegisterItem } from '../types/item';\nimport { itemPathInCR, itemPathToItemRef } from '../views/itemPathUtils';\nimport { BrowserCtx } from '../views/BrowserCtx';\n\nimport type { SomeCR } from './types';\nimport type { ChangeProposal } from './types';\n\n\nexport interface ProposalListData {\n selectedItemPath: string | null;\n extraItemViewData: { proposal: SomeCR, itemData: Record<string, RegisterItem<any> | null> }\n}\n\nexport interface SearchResultListProps {\n queryExpression: string;\n selectedItemPath: string | null;\n onSelectItem: (itemPath: string | null) => void;\n onOpenItem?: (itemPath: string) => void;\n keyExpression?: string;\n extraItemViewData: { proposal: SomeCR, itemData: Record<string, RegisterItem<any> | null> }\n className?: string;\n}\n\n\nconst ProposalItem: React.FC<ItemProps<ProposalListData>> =\nfunction ({ onSelect, onOpen, extraData, itemRef: itemPath }) {\n const { subregisters, getRelatedItemClassConfiguration } = useContext(BrowserCtx);\n\n const proposalItem = extraData.extraItemViewData.proposal.items[itemPath];\n const registerItem = extraData.extraItemViewData.itemData[itemPath] ?? null;\n\n const itemRef = itemPathToItemRef(subregisters !== undefined, itemPath);\n\n const clsConfig = getRelatedItemClassConfiguration(itemRef.classID);\n const ListItemView = clsConfig?.itemView;\n const itemPayload: Record<string, any> | null = registerItem?.data ?? null;\n \n const itemView = itemPayload && ListItemView\n ? <>\n <div>{clsConfig.title}</div>\n <ListItemView\n itemData={itemPayload}\n itemRef={itemRef}\n />\n </>\n : <span css={css`opacity: .4`}>\n (missing item data at {itemPath})\n </span>;\n\n return (\n <LabelledListIcon\n contentStyle={{ display: 'flex', flexFlow: 'row nowrap', gap: '10px' }}\n isSelected={extraData.selectedItemPath === itemPath}\n onSelect={onSelect}\n onOpen={onOpen}\n //contentClassName={(isUpdating && !objData) ? Classes.SKELETON : undefined}\n entityType={{ name: proposalItem.type }}>\n {itemView}\n </LabelledListIcon>\n );\n};\n\nconst List = makeList<ProposalListData>(ProposalItem);\n\nexport const ProposalSearchResultList: React.FC<SearchResultListProps> =\nmemo(function ({ extraItemViewData, queryExpression, selectedItemPath, onSelectItem, onOpenItem, className }) {\n const { useRegisterItemData, keyExpression } = useContext(BrowserCtx);\n const proposal = extraItemViewData.proposal;\n\n const proposedItemDataReq = useRegisterItemData({\n itemPaths: Object.keys(proposal.items),\n });\n\n const itemData = proposedItemDataReq.value;\n\n const expressionParsed =\n new Function('objPath', 'obj', queryExpression) as (objPath: string, obj: null | RegisterItem<any> | ChangeProposal) => boolean;\n\n\n const predicate = useCallback(([objPath, obj]: [string, ChangeProposal]) => {\n const objPathInCR = itemPathInCR(objPath, extraItemViewData.proposal.id);\n return (\n expressionParsed(objPath, itemData[objPath])\n || expressionParsed(objPath, obj)\n || expressionParsed(objPathInCR, itemData[objPath])\n || expressionParsed(objPathInCR, obj)\n );\n }, [queryExpression, itemData, extraItemViewData.proposal.id]);\n\n const matchingItemIDs = useMemo(() => {\n const keyExpressionParsed = keyExpression\n ? new Function('obj', `return ${keyExpression}`) as (obj: RegisterItem<any>) => any\n : null;\n\n const matchingItems = Object.entries(proposal.items).filter(predicate);\n\n const matchingItemsWithKeys = keyExpressionParsed && !proposedItemDataReq.isUpdating\n ? matchingItems.map(([p, ]) => {\n try {\n return [p, keyExpressionParsed(itemData[p]!)];\n } catch (e) {\n console.debug(\"Failed to run key expression\", keyExpression, p, itemData[p], e);\n return [p, p];\n }\n })\n : matchingItems.map(([p, ]) => [p, p]);\n\n matchingItemsWithKeys.sort((pair1, pair2) =>\n typeof pair1[1] === 'string'\n ? pair1[1].localeCompare(pair2[1])\n : typeof pair1[1] === 'number'\n ? pair1[1] - pair2[1]\n : 0);\n\n return matchingItemsWithKeys.map(([p, ]) => p);\n }, [keyExpression, itemData, predicate, proposal.items]);\n\n const extraData: ProposalListData = useMemo((() => ({\n extraItemViewData: { proposal, itemData },\n selectedItemPath,\n })), [selectedItemPath, proposal, itemData]);\n\n const getListData = useCallback(function _getListData(): ListData<ProposalListData> | null {\n return {\n items: matchingItemIDs,\n selectedItem: selectedItemPath,\n selectItem: onSelectItem,\n openItem: onOpenItem,\n itemHeight: 32,\n padding: 0,\n extraData,\n };\n }, [matchingItemIDs.join(','), extraData, onOpenItem, onSelectItem]);\n\n return <List\n className={className}\n getListData={getListData}\n />;\n});\n\n\nexport default ProposalSearchResultList;\n"]}
|
|
1
|
+
{"version":3,"file":"Search.js","sourceRoot":"","sources":["../../src/proposals/Search.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport makeList, { type ItemProps, LabelledListIcon, type ListData } from '@riboseinc/paneron-extension-kit/widgets/List';\n\nimport type { RegisterItem } from '../types/item';\nimport { itemPathInCR, itemPathToItemRef } from '../views/itemPathUtils';\nimport { BrowserCtx } from '../views/BrowserCtx';\n\nimport type { SomeCR } from './types';\nimport type { ChangeProposal } from './types';\n\n\nexport interface ProposalListData {\n selectedItemPath: string | null;\n extraItemViewData: { proposal: SomeCR, itemData: Record<string, RegisterItem<any> | null> }\n}\n\nexport interface SearchResultListProps {\n queryExpression: string;\n selectedItemPath: string | null;\n onSelectItem: (itemPath: string | null) => void;\n onOpenItem?: (itemPath: string) => void;\n keyExpression?: string;\n extraItemViewData: { proposal: SomeCR, itemData: Record<string, RegisterItem<any> | null> }\n className?: string;\n}\n\n\nconst ProposalItem: React.FC<ItemProps<ProposalListData>> =\nfunction ({ onSelect, onOpen, extraData, itemRef: itemPath }) {\n const { subregisters, getRelatedItemClassConfiguration } = useContext(BrowserCtx);\n\n const proposalItem = extraData.extraItemViewData.proposal.items[itemPath];\n const registerItem = extraData.extraItemViewData.itemData[itemPath] ?? null;\n\n const itemRef = itemPathToItemRef(subregisters !== undefined, itemPath);\n\n const clsConfig = getRelatedItemClassConfiguration(itemRef.classID);\n const ListItemView = clsConfig?.itemView;\n const itemPayload: Record<string, any> | null = registerItem?.data ?? null;\n \n const itemView = itemPayload && ListItemView\n ? <>\n <div>{clsConfig.title}</div>\n <ListItemView\n itemData={itemPayload}\n itemRef={itemRef}\n />\n </>\n : <span css={css`opacity: .4`}>\n (missing item data at {itemPath})\n </span>;\n\n return (\n <LabelledListIcon\n contentStyle={{ display: 'flex', flexFlow: 'row nowrap', gap: '10px' }}\n isSelected={extraData.selectedItemPath === itemPath}\n onSelect={onSelect}\n onOpen={onOpen}\n //contentClassName={(isUpdating && !objData) ? Classes.SKELETON : undefined}\n entityType={{ name: proposalItem.type }}>\n {itemView}\n </LabelledListIcon>\n );\n};\n\nconst List = makeList<ProposalListData>(ProposalItem);\n\nexport const ProposalSearchResultList: React.FC<SearchResultListProps> =\nmemo(function ({ extraItemViewData, queryExpression, selectedItemPath, onSelectItem, onOpenItem, className }) {\n const { useRegisterItemData, keyExpression } = useContext(BrowserCtx);\n const proposal = extraItemViewData.proposal;\n\n const proposedItemDataReq = useRegisterItemData({\n itemPaths: Object.keys(proposal.items),\n });\n\n const itemData = proposedItemDataReq.value;\n\n let expressionParsed: (objPath: string, obj: null | RegisterItem<any> | ChangeProposal) => boolean;\n try {\n expressionParsed = new Function('objPath', 'obj', queryExpression) as typeof expressionParsed;\n } catch (e) {\n console.error(\"Parsing query expression failed\", e);\n expressionParsed = () => false;\n }\n\n\n const predicate = useCallback(([objPath, obj]: [string, ChangeProposal]) => {\n const objPathInCR = itemPathInCR(objPath, extraItemViewData.proposal.id);\n try {\n return (\n expressionParsed(objPath, itemData[objPath])\n || expressionParsed(objPath, obj)\n || expressionParsed(objPathInCR, itemData[objPath])\n || expressionParsed(objPathInCR, obj)\n );\n } catch (e) {\n console.error(\"Predicate failed\", e);\n return false;\n }\n }, [queryExpression, itemData, extraItemViewData.proposal.id]);\n\n const matchingItemIDs = useMemo(() => {\n let keyExpressionParsed: null | ((obj: RegisterItem<any>) => any);\n try {\n keyExpressionParsed = keyExpression\n ? new Function('obj', `return ${keyExpression}`) as (obj: RegisterItem<any>) => any\n : null;\n } catch (e) {\n console.error(\"Parsing key expression failed\", e);\n keyExpressionParsed = null;\n }\n\n const matchingItems = Object.entries(proposal.items).filter(predicate);\n\n const matchingItemsWithKeys = keyExpressionParsed && !proposedItemDataReq.isUpdating\n ? matchingItems.map(([p, ]) => {\n try {\n return [p, keyExpressionParsed!(itemData[p]!)];\n } catch (e) {\n console.debug(\"Failed to run key expression\", keyExpression, p, itemData[p], e);\n return [p, p];\n }\n })\n : matchingItems.map(([p, ]) => [p, p]);\n\n matchingItemsWithKeys.sort((pair1, pair2) =>\n typeof pair1[1] === 'string'\n ? pair1[1].localeCompare(pair2[1])\n : typeof pair1[1] === 'number'\n ? pair1[1] - pair2[1]\n : 0);\n\n return matchingItemsWithKeys.map(([p, ]) => p);\n }, [keyExpression, itemData, predicate, proposal.items]);\n\n const extraData: ProposalListData = useMemo((() => ({\n extraItemViewData: { proposal, itemData },\n selectedItemPath,\n })), [selectedItemPath, proposal, itemData]);\n\n const getListData = useCallback(function _getListData(): ListData<ProposalListData> | null {\n return {\n items: matchingItemIDs,\n selectedItem: selectedItemPath,\n selectItem: onSelectItem,\n openItem: onOpenItem,\n itemHeight: 32,\n padding: 0,\n extraData,\n };\n }, [matchingItemIDs.join(','), extraData, onOpenItem, onSelectItem]);\n\n return <List\n className={className}\n getListData={getListData}\n />;\n});\n\n\nexport default ProposalSearchResultList;\n"]}
|
|
@@ -15,6 +15,8 @@ var _context2 = require("@riboseinc/paneron-extension-kit/context");
|
|
|
15
15
|
|
|
16
16
|
var _SearchResultList = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/SearchResultList"));
|
|
17
17
|
|
|
18
|
+
var _types = require("../../../proposals/types");
|
|
19
|
+
|
|
18
20
|
var _queries = require("../../../proposals/queries");
|
|
19
21
|
|
|
20
22
|
var _BrowserCtx = require("../../BrowserCtx");
|
|
@@ -48,7 +50,7 @@ exports.PendingChangeRequestsBlock = PendingChangeRequestsBlock;
|
|
|
48
50
|
|
|
49
51
|
const ChangeRequestHistoryBlock = function () {
|
|
50
52
|
return (0, _react2.jsx)(ChangeRequestListBlock, {
|
|
51
|
-
impliedQuery: _queries.DISPOSED_CR_QUERY
|
|
53
|
+
impliedQuery: `(${_queries.DISPOSED_CR_QUERY}) && (obj.state === "${_types.State.ACCEPTED}" || obj.state === "${_types.State.ACCEPTED_ON_APPEAL}")`
|
|
52
54
|
});
|
|
53
55
|
};
|
|
54
56
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Registration/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,4EAA4E;AAC5E,OAAO,oBAAoB,MAAM,2DAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Registration/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,4EAA4E;AAC5E,OAAO,oBAAoB,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAoC,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,CAAC,MAAM,0BAA0B,GAAmC;IACxE,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,mBAAmB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,iBAAiB,CAAC;IAC3D,MAAM,oBAAoB,GAAG,mBAAmB;QAC9C,CAAC,CAAC,mDAAmD,mBAAmB,GAAG;QAC3E,CAAC,CAAC,OAAO,CAAC;IACZ,qFAAqF;IACrF,MAAM,KAAK,GAAG,kDAAkD,oBAAoB,GAAG,CAAC;IAExF,OAAO,IAAC,sBAAsB,IAAC,YAAY,EAAE,KAAK,GAAI,CAAC;AACzD,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,yBAAyB,GAAmC;IACvE,OAAO,IAAC,sBAAsB,IAAC,YAAY,EAAE,IAAI,iBAAiB,wBAAwB,KAAK,CAAC,QAAQ,uBAAuB,KAAK,CAAC,kBAAkB,IAAI,GAAI,CAAC;AAClK,CAAC,CAAC;AAMF,MAAM,YAAY,GAA4B;IAC5C,mBAAmB,EAAE,EAAE;IACvB,gBAAgB,EAAE,IAAI;CACd,CAAC;AAKX,MAAM,CAAC,MAAM,sBAAsB,GAA0D,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC1I,MAAM,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACvE,MAAM,EAAE,oBAAoB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,CAC5B,oBAAoB;QAClB,CAAC,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC;QAC7C,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACxB,gFAAgF;IAEpF,MAAM,CAAE,KAAK,EAAE,QAAQ,EAAG,GAAI,gCAAkH,CAC9I,6BAA6B,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,EAAE,EACtF,SAAS,EACT,SAAS,EACT,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;QACpB,QAAQ,MAAM,CAAC,IAAI,EAAE;YACnB,KAAK,8BAA8B;gBACjC,OAAO;oBACL,GAAG,SAAS;oBACZ,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;iBAC9C,CAAC;YACJ,KAAK,aAAa;gBAChB,OAAO;oBACL,GAAG,SAAS;oBACZ,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;iBAC1C,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;IACH,CAAC,EACD,YAAY,EACZ,IAAI,CAAC,CAAC;IAER,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ;QACnC,CAAC,CAAC,UAAU,aAAa,OAAO,YAAY,kBAAkB,QAAQ,kBAAkB;QACxF,CAAC,CAAC,QAAQ,KAAK,IAAI;YACjB,CAAC,CAAC,UAAU,aAAa,OAAO,YAAY,EAAE;YAC9C,6DAA6D;YAC7D,mDAAmD;YACnD,CAAC,CAAC,cAAc,CACnB,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAClB,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,cAAc,GAAG,CAAC;YACvE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,QAAQ,KAAK,SAAS,IAAI,cAAc,EAAE;YAC5C,UAAU,CAAC,GAAG,EAAE;gBACd,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YAC3E,CAAC,EAAE,GAAG,CAAC,CAAC;SACT;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAExC,OAAO,CACL,IAAC,6BAA6B,IAC5B,eAAe,EAAE,KAAK,EACtB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,aAAa,EAAC,oLAAoL,EAClM,YAAY,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CACpC,QAAQ,CAAC;YACP,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,EAAE,QAAQ,EAAE;SACtB,CAAC,CACH,EAAE,CAAC,QAAQ,CAAC,CAAC,EACd,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAClC,QAAQ,CAAC,GAAG,SAAS,CAAC,cAAc,IAAI,QAAQ,EAAE,CAAC,CACpD,EAAE,CAAC,QAAQ,CAAC,CAAC,GACd,CACH,CAAA;AACH,CAAC,CAAC;AAGF,MAAM,aAAa,GAGd,UAAU,EAAE,UAAU,EAAE;IAC3B,OAAO,IAAC,kBAAkB,IAAC,QAAQ,EAAE,UAAoB,GAAI,CAAC;AAChE,CAAC,CAAC;AAGF,MAAM,6BAA6B,GAAG,oBAAoB,CAAS,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9F,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,wBAAwB,OAAO,EAAE;KAC7C;CACF,CAAC,CAAC,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useEffect, useMemo, useCallback, useContext } from 'react';\nimport { jsx } from '@emotion/react';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\n//import { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport { type Base as BaseCR, type SomeCR, State } from '../../../proposals/types';\nimport { CR_BASE_QUERY, DISPOSED_CR_QUERY } from '../../../proposals/queries';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { ProposalAsListItem } from '../../../proposals/ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\nexport const PendingChangeRequestsBlock: React.FC<Record<never, never>> = function () {\n const { stakeholder } = useContext(BrowserCtx);\n const stakeholderUsername = stakeholder?.gitServerUsername;\n const stakeholderCondition = stakeholderUsername\n ? `obj.submittingStakeholderGitServerUsername === \"${stakeholderUsername}\"`\n : 'false';\n // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n const query = `!obj.timeDisposed && (obj.state !== \"draft\" || ${stakeholderCondition})`;\n\n return <ChangeRequestListBlock impliedQuery={query} />;\n};\n\n\nexport const ChangeRequestHistoryBlock: React.FC<Record<never, never>> = function () {\n return <ChangeRequestListBlock impliedQuery={`(${DISPOSED_CR_QUERY}) && (obj.state === \"${State.ACCEPTED}\" || obj.state === \"${State.ACCEPTED_ON_APPEAL}\")`} />;\n};\n\ninterface ChangeRequestBlockState {\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\nconst initialState: ChangeRequestBlockState = {\n quickSubstringQuery: '',\n selectedItemPath: null,\n} as const;\ntype ChangeRequestBlockAction =\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nexport const ChangeRequestListBlock: React.FC<{ impliedQuery: string, itemPath?: string }> = function ({ impliedQuery, itemPath: _itemPath }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { selectedRegisterItem } = useContext(BrowserCtx);\n\n const itemPath = _itemPath ?? (\n selectedRegisterItem\n ? itemRefToItemPath(selectedRegisterItem.ref)\n : selectedRegisterItem);\n // ^ Adopt undefined value if no data is available, null if item is not selected\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<ChangeRequestBlockState, ChangeRequestBlockAction>)(\n `change-request-list-block-${itemPath === null ? 'global' : itemPath}-${impliedQuery}`,\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\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 initialState,\n null);\n\n const query = useMemo((() => itemPath\n ? `return ${CR_BASE_QUERY} && ${impliedQuery} && obj.items[\"${itemPath}\"] !== undefined`\n : itemPath === null\n ? `return ${CR_BASE_QUERY} && ${impliedQuery}`\n // If item data is loading or unavailable, don’t show any CRs\n // to avoid flashing all CRs during item switching.\n : `return false`\n ), [impliedQuery, itemPath]);\n\n useEffect(() => {\n const selectedCRPath: string | null =\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.CHANGE_REQUEST}:`)\n ? focusedTabURI.split(':')[1]\n : null;\n if (itemPath !== undefined && selectedCRPath) {\n setTimeout(() => {\n dispatch({ type: 'select-item', payload: { itemPath: selectedCRPath } });\n }, 500);\n }\n }, [dispatch, itemPath, focusedTabURI]);\n\n return (\n <ChangeRequestSearchResultList\n queryExpression={query}\n selectedItemPath={state.selectedItemPath}\n keyExpression=\"(new Date()).getTime() * 100 - (typeof obj.timeDisposed === 'object' ? (obj.timeDisposed ?? new Date()) : new Date(obj.timeDisposed)).getTime() + Math.floor(Math.random() * 1000)\"\n onSelectItem={useCallback((itemPath =>\n dispatch({\n type: 'select-item',\n payload: { itemPath },\n })\n ), [dispatch])}\n onOpenItem={useCallback((itemPath =>\n spawnTab(`${Protocols.CHANGE_REQUEST}:${itemPath}`)\n ), [spawnTab])}\n />\n )\n};\n\n\nconst CRHistoryItem: React.FC<{\n objectData: BaseCR,\n objectPath: string,\n}> = function ({ objectData }) {\n return <ProposalAsListItem proposal={objectData as SomeCR} />;\n};\n\n\nconst ChangeRequestSearchResultList = makeSearchResultList<BaseCR>(CRHistoryItem, (objPath) => ({\n name: 'Prp.',\n iconProps: {\n icon: 'lightbulb',\n title: objPath,\n htmlTitle: `icon for proposal at ${objPath}`,\n },\n}));\n"]}
|