@riboseinc/paneron-registry-kit 2.0.0-dev8 → 2.0.0
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/common.d.ts +1 -1
- package/common.js +1 -1
- package/common.js.map +1 -1
- package/index.d.ts +3 -3
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +26 -18
- package/types/cr.d.ts +216 -0
- package/types/cr.js +175 -0
- package/types/cr.js.map +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +19 -0
- package/types/index.js.map +1 -1
- package/types/item.d.ts +13 -3
- package/types/item.js +11 -1
- package/types/item.js.map +1 -1
- package/types/proposal.d.ts +31 -14
- package/types/proposal.js +1 -1
- package/types/proposal.js.map +1 -1
- package/types/register.d.ts +6 -5
- package/types/register.js +19 -1
- package/types/register.js.map +1 -1
- package/types/registry.d.ts +8 -3
- package/types/registry.js +8 -1
- package/types/registry.js.map +1 -1
- package/types/stakeholder.d.ts +40 -16
- package/types/stakeholder.js +47 -3
- package/types/stakeholder.js.map +1 -1
- package/types/views.d.ts +98 -24
- package/types/views.js.map +1 -1
- package/views/AnnotatedChange.d.ts +7 -0
- package/views/AnnotatedChange.js +91 -0
- package/views/AnnotatedChange.js.map +1 -0
- package/views/BrowserCtx.d.ts +66 -2
- package/views/BrowserCtx.js +13 -2
- package/views/BrowserCtx.js.map +1 -1
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.d.ts +17 -0
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +202 -0
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +6 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js +50 -0
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -0
- package/views/FilterCriteria/criteriaGroupToSummary.d.ts +5 -0
- package/views/FilterCriteria/criteriaGroupToSummary.js +62 -0
- package/views/FilterCriteria/criteriaGroupToSummary.js.map +1 -0
- package/views/FilterCriteria/criteriaToNodes.d.ts +24 -0
- package/views/FilterCriteria/criteriaToNodes.js +159 -0
- package/views/FilterCriteria/criteriaToNodes.js.map +1 -0
- package/views/FilterCriteria/index.d.ts +23 -0
- package/views/FilterCriteria/index.js +130 -0
- package/views/FilterCriteria/index.js.map +1 -0
- package/views/FilterCriteria/models.d.ts +68 -0
- package/views/FilterCriteria/models.js +34 -0
- package/views/FilterCriteria/models.js.map +1 -0
- package/views/FilterCriteria/mutateGroup.d.ts +17 -0
- package/views/FilterCriteria/mutateGroup.js +59 -0
- package/views/FilterCriteria/mutateGroup.js.map +1 -0
- package/views/GenericRelatedItemView.d.ts +1 -1
- package/views/GenericRelatedItemView.js +143 -101
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/RegisterStakeholder.d.ts +9 -0
- package/views/RegisterStakeholder.js +40 -0
- package/views/RegisterStakeholder.js.map +1 -0
- package/views/RegisterVersion.d.ts +9 -0
- package/views/RegisterVersion.js +41 -0
- package/views/RegisterVersion.js.map +1 -0
- package/views/SearchQuery.d.ts +13 -0
- package/views/SearchQuery.js +137 -0
- package/views/SearchQuery.js.map +1 -0
- package/views/change-request/ChangeRequestContext.d.ts +20 -0
- package/views/change-request/ChangeRequestContext.js +56 -0
- package/views/change-request/ChangeRequestContext.js.map +1 -0
- package/views/change-request/Proposals.d.ts +21 -0
- package/views/change-request/Proposals.js +331 -0
- package/views/change-request/Proposals.js.map +1 -0
- package/views/change-request/objectChangeset.d.ts +31 -0
- package/views/change-request/objectChangeset.js +229 -0
- package/views/change-request/objectChangeset.js.map +1 -0
- package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
- package/views/detail/ChangeRequest/Proposal.js +142 -0
- package/views/detail/ChangeRequest/Proposal.js.map +1 -0
- package/views/detail/ChangeRequest/index.d.ts +13 -0
- package/views/detail/ChangeRequest/index.js +207 -0
- package/views/detail/ChangeRequest/index.js.map +1 -0
- package/views/detail/ChangeRequest/transitions.d.ts +28 -0
- package/views/detail/ChangeRequest/transitions.js +530 -0
- package/views/detail/ChangeRequest/transitions.js.map +1 -0
- package/views/detail/CustomView/index.d.ts +13 -0
- package/views/detail/CustomView/index.js +68 -0
- package/views/detail/CustomView/index.js.map +1 -0
- package/views/detail/RegisterHome/index.d.ts +5 -0
- package/views/detail/RegisterHome/index.js +128 -0
- package/views/detail/RegisterHome/index.js.map +1 -0
- package/views/detail/RegisterItem/RelatedItems.d.ts +13 -0
- package/views/detail/RegisterItem/RelatedItems.js +61 -0
- package/views/detail/RegisterItem/RelatedItems.js.map +1 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.d.ts +13 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.js +56 -0
- package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -0
- package/views/detail/RegisterItem/index.d.ts +13 -0
- package/views/detail/RegisterItem/index.js +356 -0
- package/views/detail/RegisterItem/index.js.map +1 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.d.ts +10 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.js +331 -0
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -0
- package/views/detail/RegisterMeta/index.d.ts +10 -0
- package/views/detail/RegisterMeta/index.js +111 -0
- package/views/detail/RegisterMeta/index.js.map +1 -0
- package/views/detail/index.d.ts +1 -0
- package/views/detail/index.js +24 -0
- package/views/detail/index.js.map +1 -0
- package/views/diffing/InlineDiff.d.ts +12 -0
- package/views/diffing/InlineDiff.js +58 -0
- package/views/diffing/InlineDiff.js.map +1 -0
- package/views/diffing/StructuredDiff.d.ts +11 -0
- package/views/diffing/StructuredDiff.js +65 -0
- package/views/diffing/StructuredDiff.js.map +1 -0
- package/views/hooks/useCustomView.d.ts +3 -0
- package/views/hooks/useCustomView.js +24 -0
- package/views/hooks/useCustomView.js.map +1 -0
- package/views/hooks/useItemClassConfig.d.ts +3 -0
- package/views/hooks/useItemClassConfig.js +24 -0
- package/views/hooks/useItemClassConfig.js.map +1 -0
- package/views/hooks/useItemRef.d.ts +3 -0
- package/views/hooks/useItemRef.js +39 -0
- package/views/hooks/useItemRef.js.map +1 -0
- package/views/hooks/useSingleRegisterItemData.d.ts +3 -0
- package/views/hooks/useSingleRegisterItemData.js +32 -0
- package/views/hooks/useSingleRegisterItemData.js.map +1 -0
- package/views/index.d.ts +2 -2
- package/views/index.js +161 -130
- package/views/index.js.map +1 -1
- package/views/itemPathUtils.d.ts +45 -2
- package/views/itemPathUtils.js +101 -14
- package/views/itemPathUtils.js.map +1 -1
- package/views/itemQueryUtils.d.ts +11 -0
- package/views/itemQueryUtils.js +48 -0
- package/views/itemQueryUtils.js.map +1 -0
- package/views/protocolRegistry.d.ts +12 -0
- package/views/protocolRegistry.js +42 -0
- package/views/protocolRegistry.js.map +1 -0
- package/views/sidebar/Browse/index.d.ts +11 -0
- package/views/sidebar/Browse/index.js +453 -0
- package/views/sidebar/Browse/index.js.map +1 -0
- package/views/sidebar/Export/index.d.ts +5 -0
- package/views/sidebar/Export/index.js +94 -0
- package/views/sidebar/Export/index.js.map +1 -0
- package/views/sidebar/ListItem.d.ts +10 -0
- package/views/sidebar/ListItem.js +43 -0
- package/views/sidebar/ListItem.js.map +1 -0
- package/views/sidebar/Registration/index.d.ts +5 -0
- package/views/sidebar/Registration/index.js +163 -0
- package/views/sidebar/Registration/index.js.map +1 -0
- package/views/sidebar/Search/index.d.ts +18 -0
- package/views/sidebar/Search/index.js +177 -0
- package/views/sidebar/Search/index.js.map +1 -0
- package/views/sidebar/index.d.ts +6 -0
- package/views/sidebar/index.js +104 -0
- package/views/sidebar/index.js.map +1 -0
- package/views/util.d.ts +29 -5
- package/views/util.js +92 -6
- package/views/util.js.map +1 -1
- package/views/ChangeRequest.d.ts +0 -12
- package/views/ChangeRequest.js +0 -689
- package/views/ChangeRequest.js.map +0 -1
- package/views/FilterCriteria.d.ts +0 -27
- package/views/FilterCriteria.js +0 -410
- package/views/FilterCriteria.js.map +0 -1
- package/views/ItemBrowser.d.ts +0 -12
- package/views/ItemBrowser.js +0 -255
- package/views/ItemBrowser.js.map +0 -1
- package/views/ItemDetails.d.ts +0 -14
- package/views/ItemDetails.js +0 -128
- package/views/ItemDetails.js.map +0 -1
- package/views/MainView.d.ts +0 -8
- package/views/MainView.js +0 -34
- package/views/MainView.js.map +0 -1
- package/views/RegisterInformation.d.ts +0 -7
- package/views/RegisterInformation.js +0 -264
- package/views/RegisterInformation.js.map +0 -1
- package/views/RegisterItemGrid.d.ts +0 -25
- package/views/RegisterItemGrid.js +0 -248
- package/views/RegisterItemGrid.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/views/sidebar/ListItem.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,+BAA+B;AAC/B,MAAM,QAAQ,GACd,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE;IAClC,MAAM,EAAE,YAAY,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,KAAK,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,gCAAgC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;IACxC,MAAM,WAAW,GAAG,UAAU,EAAE,IAAI,CAAC;IAErC,MAAM,QAAQ,GAAG,WAAW;QAC1B,CAAC,CAAC,IAAC,YAAY,IACX,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,GAChB;QACJ,CAAC,CAAC,cAAM,GAAG,EAAE,GAAG,CAAA,aAAa;;YACF,UAAU;gBAC5B,CAAC;IAEZ,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA;AAGD,eAAe,QAAQ,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport type { RegisterItem } from '../../types';\nimport { BrowserCtx } from '../BrowserCtx';\nimport { itemPathToItemRef } from '../itemPathUtils';\n\n\n/** Register item list view. */\nconst ListItem: React.FC<{ objectData: RegisterItem<any>, objectPath: string }> =\nfunction ({ objectData, objectPath }) {\n const { subregisters, getRelatedItemClassConfiguration } = useContext(BrowserCtx);\n const itemRef = itemPathToItemRef(subregisters !== undefined, objectPath);\n const clsConfig = getRelatedItemClassConfiguration(itemRef.classID);\n const ListItemView = clsConfig.itemView;\n const itemPayload = objectData?.data;\n\n const itemView = itemPayload\n ? <ListItemView\n itemData={itemPayload}\n itemRef={itemRef}\n />\n : <span css={css`opacity: .4`}>\n (missing item data at {objectPath})\n </span>;\n\n return itemView;\n}\n\n\nexport default ListItem;\n"]}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ChangeRequestHistoryBlock = exports.PendingChangeRequestsBlock = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _react2 = require("@emotion/react");
|
|
11
|
+
|
|
12
|
+
var _core = require("@blueprintjs/core");
|
|
13
|
+
|
|
14
|
+
var _context = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
|
|
15
|
+
|
|
16
|
+
var _context2 = require("@riboseinc/paneron-extension-kit/context");
|
|
17
|
+
|
|
18
|
+
var _SearchResultList = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/SearchResultList"));
|
|
19
|
+
|
|
20
|
+
var _cr = require("../../../types/cr");
|
|
21
|
+
|
|
22
|
+
var _BrowserCtx = require("../../BrowserCtx");
|
|
23
|
+
|
|
24
|
+
var _itemPathUtils = require("../../itemPathUtils");
|
|
25
|
+
|
|
26
|
+
var _util = require("../../../views/util");
|
|
27
|
+
|
|
28
|
+
var _protocolRegistry = require("../../protocolRegistry");
|
|
29
|
+
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
|
|
32
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
33
|
+
|
|
34
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
35
|
+
|
|
36
|
+
/** @jsx jsx */
|
|
37
|
+
|
|
38
|
+
/** @jsxFrag React.Fragment */
|
|
39
|
+
//import { DatasetContext } from '@riboseinc/paneron-extension-kit/context';
|
|
40
|
+
const PendingChangeRequestsBlock = function () {
|
|
41
|
+
const {
|
|
42
|
+
stakeholder
|
|
43
|
+
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
44
|
+
const stakeholderUsername = stakeholder === null || stakeholder === void 0 ? void 0 : stakeholder.gitServerUsername;
|
|
45
|
+
const stakeholderCondition = stakeholderUsername ? `obj.submittingStakeholderGitServerUsername === "${stakeholderUsername}"` : 'false'; // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.
|
|
46
|
+
|
|
47
|
+
const query = `!obj.timeDisposed && (obj.state !== "draft" || ${stakeholderCondition})`;
|
|
48
|
+
return (0, _react2.jsx)(ChangeRequestListBlock, {
|
|
49
|
+
impliedQuery: query
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
exports.PendingChangeRequestsBlock = PendingChangeRequestsBlock;
|
|
54
|
+
|
|
55
|
+
const ChangeRequestHistoryBlock = function () {
|
|
56
|
+
return (0, _react2.jsx)(ChangeRequestListBlock, {
|
|
57
|
+
impliedQuery: DISPOSED_CR_QUERY
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
exports.ChangeRequestHistoryBlock = ChangeRequestHistoryBlock;
|
|
62
|
+
const CR_BASE_QUERY = 'objPath.indexOf("/proposals/") === 0 && objPath.endsWith("main.yaml")';
|
|
63
|
+
const DISPOSED_CR_QUERY = 'obj.timeDisposed !== undefined && obj.timeDisposed !== null';
|
|
64
|
+
|
|
65
|
+
const ChangeRequestListBlock = function ({
|
|
66
|
+
impliedQuery
|
|
67
|
+
}) {
|
|
68
|
+
const {
|
|
69
|
+
usePersistentDatasetStateReducer
|
|
70
|
+
} = (0, _react.useContext)(_context2.DatasetContext);
|
|
71
|
+
const {
|
|
72
|
+
spawnTab,
|
|
73
|
+
focusedTabURI
|
|
74
|
+
} = (0, _react.useContext)(_context.TabbedWorkspaceContext);
|
|
75
|
+
const {
|
|
76
|
+
selectedRegisterItem
|
|
77
|
+
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
78
|
+
const initialState = {
|
|
79
|
+
quickSubstringQuery: '',
|
|
80
|
+
selectedItemPath: null
|
|
81
|
+
};
|
|
82
|
+
const itemPath = selectedRegisterItem ? (0, _itemPathUtils.itemRefToItemPath)(selectedRegisterItem.ref) : selectedRegisterItem; // ^ Adopt undefined value if no data is available, null if item is not selected
|
|
83
|
+
|
|
84
|
+
const [state, dispatch] = usePersistentDatasetStateReducer(`change-request-list-block-${itemPath === null ? 'global' : itemPath}-${impliedQuery}`, undefined, undefined, (prevState, action) => {
|
|
85
|
+
switch (action.type) {
|
|
86
|
+
case 'update-quick-substring-query':
|
|
87
|
+
return { ...prevState,
|
|
88
|
+
quickSubstringQuery: action.payload.substring
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
case 'select-item':
|
|
92
|
+
return { ...prevState,
|
|
93
|
+
selectedItemPath: action.payload.itemPath
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
default:
|
|
97
|
+
throw new Error("Unexpected search state");
|
|
98
|
+
}
|
|
99
|
+
}, initialState, null);
|
|
100
|
+
const query = itemPath ? `return ${CR_BASE_QUERY} && ${impliedQuery} && obj.items["${itemPath}"] !== undefined` : itemPath === null ? `return ${CR_BASE_QUERY} && ${impliedQuery}` // If item data is loading or unavailable, don’t show any CRs
|
|
101
|
+
// to avoid flashing all CRs during item switching.
|
|
102
|
+
: `return false`;
|
|
103
|
+
const selectedCRPath = focusedTabURI && focusedTabURI.startsWith(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:`) ? focusedTabURI.split(':')[1] : null;
|
|
104
|
+
(0, _react.useEffect)(() => {
|
|
105
|
+
if (itemPath !== undefined && selectedCRPath) {
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
dispatch({
|
|
108
|
+
type: 'select-item',
|
|
109
|
+
payload: {
|
|
110
|
+
itemPath: selectedCRPath
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}, 500);
|
|
114
|
+
}
|
|
115
|
+
}, [itemPath, selectedCRPath]);
|
|
116
|
+
return (0, _react2.jsx)(ChangeRequestSearchResultList, {
|
|
117
|
+
queryExpression: query,
|
|
118
|
+
selectedItemPath: state.selectedItemPath,
|
|
119
|
+
onSelectItem: itemPath => dispatch({
|
|
120
|
+
type: 'select-item',
|
|
121
|
+
payload: {
|
|
122
|
+
itemPath
|
|
123
|
+
}
|
|
124
|
+
}),
|
|
125
|
+
onOpenItem: itemPath => spawnTab(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:${itemPath}`)
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const CRHistoryItem = function ({
|
|
130
|
+
objectData
|
|
131
|
+
}) {
|
|
132
|
+
const {
|
|
133
|
+
activeChangeRequestID,
|
|
134
|
+
setActiveChangeRequestID
|
|
135
|
+
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
136
|
+
const isActive = activeChangeRequestID === objectData.id;
|
|
137
|
+
const canToggle = activeChangeRequestID == null || isActive;
|
|
138
|
+
const justification = (0, _cr.hasSubmitterInput)(objectData) ? objectData.justification : 'N/A';
|
|
139
|
+
return (0, _react2.jsx)("span", {
|
|
140
|
+
title: `${justification} (proposal ID: ${objectData.id})`
|
|
141
|
+
}, (0, _react2.jsx)(_core.Icon, {
|
|
142
|
+
icon: isActive ? 'record' : 'dot',
|
|
143
|
+
css: (0, _react2.css)`vertical-align: top; ${canToggle ? 'cursor: pointer; transition: all .2s;' : 'opacity: .5;'}`,
|
|
144
|
+
title: canToggle ? isActive ? "Click to deactivate this proposal" : "Click to activate this proposal" : undefined,
|
|
145
|
+
onClick: canToggle ? () => setActiveChangeRequestID === null || setActiveChangeRequestID === void 0 ? void 0 : setActiveChangeRequestID(activeChangeRequestID === objectData.id ? null : objectData.id) : undefined,
|
|
146
|
+
intent: isActive ? 'danger' : canToggle ? 'primary' : undefined
|
|
147
|
+
}), "\u00A0", (0, _cr.isDisposed)(objectData) ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_util.Datestamp, {
|
|
148
|
+
date: objectData.timeDisposed,
|
|
149
|
+
title: "Disposed"
|
|
150
|
+
}), ": ") : (0, _cr.hadBeenProposed)(objectData) ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_util.Datestamp, {
|
|
151
|
+
date: objectData.timeProposed,
|
|
152
|
+
title: "Proposed"
|
|
153
|
+
}), ": ") : null, justification);
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const ChangeRequestSearchResultList = (0, _SearchResultList.default)(CRHistoryItem, objPath => ({
|
|
157
|
+
name: 'Prp.',
|
|
158
|
+
iconProps: {
|
|
159
|
+
icon: 'lightbulb',
|
|
160
|
+
title: objPath,
|
|
161
|
+
htmlTitle: `icon for proposal at ${objPath}`
|
|
162
|
+
}
|
|
163
|
+
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Registration/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useEffect, useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Icon } from '@blueprintjs/core';\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, hasSubmitterInput, isDisposed, hadBeenProposed } from '../../../types/cr';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { Datestamp } from '../../../views/util';\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} />;\n};\n\n\nconst CR_BASE_QUERY = 'objPath.indexOf(\"/proposals/\") === 0 && objPath.endsWith(\"main.yaml\")';\nconst DISPOSED_CR_QUERY = 'obj.timeDisposed !== undefined && obj.timeDisposed !== null';\n\n\ninterface ChangeRequestBlockState {\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\ntype ChangeRequestBlockAction =\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\n\nconst ChangeRequestListBlock: React.FC<{ impliedQuery: string }> = function ({ impliedQuery }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { selectedRegisterItem } = useContext(BrowserCtx);\n\n const initialState: ChangeRequestBlockState = {\n quickSubstringQuery: '',\n selectedItemPath: null,\n };\n\n const itemPath = 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 = 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\n const selectedCRPath: string | null =\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.CHANGE_REQUEST}:`)\n ? focusedTabURI.split(':')[1]\n : null;\n\n useEffect(() => {\n if (itemPath !== undefined && selectedCRPath) {\n setTimeout(() => {\n dispatch({ type: 'select-item', payload: { itemPath: selectedCRPath } });\n }, 500);\n }\n }, [itemPath, selectedCRPath]);\n\n return (\n <ChangeRequestSearchResultList\n queryExpression={query}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={itemPath => dispatch({ type: 'select-item', payload: { itemPath }})}\n onOpenItem={(itemPath) => spawnTab(`${Protocols.CHANGE_REQUEST}:${itemPath}`)}\n />\n )\n};\n\n\nconst CRHistoryItem: React.FC<{\n objectData: BaseCR,\n objectPath: string,\n}> = function ({ objectData }) {\n const { activeChangeRequestID, setActiveChangeRequestID } = useContext(BrowserCtx);\n const isActive = activeChangeRequestID === objectData.id;\n const canToggle = activeChangeRequestID == null || isActive;\n\n const justification = hasSubmitterInput(objectData) ? objectData.justification : 'N/A';\n\n return <span title={`${justification} (proposal ID: ${objectData.id})`}>\n <Icon\n icon={isActive ? 'record' : 'dot'}\n css={css`vertical-align: top; ${canToggle ? 'cursor: pointer; transition: all .2s;' : 'opacity: .5;'}`}\n title={canToggle\n ? isActive\n ? \"Click to deactivate this proposal\"\n : \"Click to activate this proposal\"\n : undefined}\n onClick={canToggle\n ? () => setActiveChangeRequestID?.(activeChangeRequestID === objectData.id ? null : objectData.id)\n : undefined}\n intent={isActive\n ? 'danger'\n : canToggle\n ? 'primary'\n : undefined}\n />\n \n {isDisposed(objectData)\n ? <><Datestamp date={objectData.timeDisposed} title=\"Disposed\" />: </>\n : hadBeenProposed(objectData)\n ? <><Datestamp date={objectData.timeProposed} title=\"Proposed\" />: </>\n : null}\n {justification}\n </span>;\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"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { type CriteriaGroup } from '../../FilterCriteria/models';
|
|
5
|
+
declare const Search: React.FC<{
|
|
6
|
+
/**
|
|
7
|
+
* Criteria that will always apply.
|
|
8
|
+
* Used e.g. in superseding item selection
|
|
9
|
+
* (to limit to the same item class).
|
|
10
|
+
*/
|
|
11
|
+
implicitCriteria?: CriteriaGroup;
|
|
12
|
+
availableClassIDs?: string[];
|
|
13
|
+
onOpenItem?: (itemPath: string) => void;
|
|
14
|
+
stateName?: string;
|
|
15
|
+
className?: string;
|
|
16
|
+
style?: React.CSSProperties;
|
|
17
|
+
}>;
|
|
18
|
+
export default Search;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _react2 = require("@emotion/react");
|
|
11
|
+
|
|
12
|
+
var _context = require("@riboseinc/paneron-extension-kit/context");
|
|
13
|
+
|
|
14
|
+
var _context2 = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
|
|
15
|
+
|
|
16
|
+
var _SearchResultList = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/SearchResultList"));
|
|
17
|
+
|
|
18
|
+
var _useDebounce = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/useDebounce"));
|
|
19
|
+
|
|
20
|
+
var _models = require("../../FilterCriteria/models");
|
|
21
|
+
|
|
22
|
+
var _criteriaGroupToQueryExpression = _interopRequireDefault(require("../../FilterCriteria/criteriaGroupToQueryExpression"));
|
|
23
|
+
|
|
24
|
+
var _CRITERIA_CONFIGURATION = require("../../FilterCriteria/CRITERIA_CONFIGURATION");
|
|
25
|
+
|
|
26
|
+
var _ChangeRequestContext = require("../../change-request/ChangeRequestContext");
|
|
27
|
+
|
|
28
|
+
var _itemPathUtils = require("../../itemPathUtils");
|
|
29
|
+
|
|
30
|
+
var _itemQueryUtils = require("../../itemQueryUtils");
|
|
31
|
+
|
|
32
|
+
var _BrowserCtx = require("../../BrowserCtx");
|
|
33
|
+
|
|
34
|
+
var _SearchQuery = _interopRequireDefault(require("../../SearchQuery"));
|
|
35
|
+
|
|
36
|
+
var _ListItem = _interopRequireDefault(require("../ListItem"));
|
|
37
|
+
|
|
38
|
+
var _protocolRegistry = require("../../protocolRegistry");
|
|
39
|
+
|
|
40
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
|
+
|
|
42
|
+
/** @jsx jsx */
|
|
43
|
+
|
|
44
|
+
/** @jsxFrag React.Fragment */
|
|
45
|
+
const Search = function ({
|
|
46
|
+
implicitCriteria,
|
|
47
|
+
availableClassIDs,
|
|
48
|
+
stateName,
|
|
49
|
+
onOpenItem,
|
|
50
|
+
className,
|
|
51
|
+
style
|
|
52
|
+
}) {
|
|
53
|
+
const {
|
|
54
|
+
usePersistentDatasetStateReducer
|
|
55
|
+
} = (0, _react.useContext)(_context.DatasetContext);
|
|
56
|
+
const {
|
|
57
|
+
spawnTab
|
|
58
|
+
} = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
|
|
59
|
+
const {
|
|
60
|
+
keyExpression,
|
|
61
|
+
itemClasses,
|
|
62
|
+
subregisters,
|
|
63
|
+
selectedRegisterItem
|
|
64
|
+
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
65
|
+
const {
|
|
66
|
+
changeRequest
|
|
67
|
+
} = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
|
|
68
|
+
const initialState = {
|
|
69
|
+
query: {
|
|
70
|
+
criteria: _models.BLANK_CRITERIA
|
|
71
|
+
},
|
|
72
|
+
quickSubstringQuery: '',
|
|
73
|
+
selectedItemPath: null
|
|
74
|
+
};
|
|
75
|
+
const [state, dispatch, stateRecalled] = usePersistentDatasetStateReducer(stateName ?? 'search-sidebar', undefined, undefined, (prevState, action) => {
|
|
76
|
+
switch (action.type) {
|
|
77
|
+
case 'update-query':
|
|
78
|
+
return { ...prevState,
|
|
79
|
+
query: action.payload.query
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
case 'update-quick-substring-query':
|
|
83
|
+
return { ...prevState,
|
|
84
|
+
quickSubstringQuery: action.payload.substring
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
case 'select-item':
|
|
88
|
+
return { ...prevState,
|
|
89
|
+
selectedItemPath: action.payload.itemPath
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
default:
|
|
93
|
+
throw new Error("Unexpected search state");
|
|
94
|
+
}
|
|
95
|
+
}, initialState, null);
|
|
96
|
+
const selectedItemPath = selectedRegisterItem !== null && selectedRegisterItem !== void 0 && selectedRegisterItem.ref ? (0, _itemPathUtils.itemRefToItemPath)(selectedRegisterItem.ref, changeRequest === null || changeRequest === void 0 ? void 0 : changeRequest.id) : null;
|
|
97
|
+
(0, _react.useEffect)(() => {
|
|
98
|
+
if (selectedItemPath) {
|
|
99
|
+
dispatch({
|
|
100
|
+
type: 'select-item',
|
|
101
|
+
payload: {
|
|
102
|
+
itemPath: selectedItemPath
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}, [selectedItemPath]);
|
|
107
|
+
const quickSearchString = (state.quickSubstringQuery ?? '').trim();
|
|
108
|
+
const withSearchString = state.query.criteria.criteria.length < 1 && quickSearchString !== '' ? {
|
|
109
|
+
require: 'all',
|
|
110
|
+
criteria: [{
|
|
111
|
+
key: 'raw-substring',
|
|
112
|
+
query: _CRITERIA_CONFIGURATION.RAW_SUBSTRING.toQuery({
|
|
113
|
+
substring: quickSearchString
|
|
114
|
+
}, {
|
|
115
|
+
itemClasses,
|
|
116
|
+
subregisters
|
|
117
|
+
})
|
|
118
|
+
}]
|
|
119
|
+
} : state.query.criteria;
|
|
120
|
+
const withImplicit = implicitCriteria ? {
|
|
121
|
+
require: 'all',
|
|
122
|
+
criteria: [implicitCriteria, withSearchString]
|
|
123
|
+
} : withSearchString;
|
|
124
|
+
const effectiveQueryExpression = withImplicit.criteria.length > 0 ? (0, _criteriaGroupToQueryExpression.default)(withImplicit) // If no criteria provided, don’t show anything by default.
|
|
125
|
+
: 'false';
|
|
126
|
+
const stateRecalledDebounced = (0, _useDebounce.default)(stateRecalled, 100);
|
|
127
|
+
const queryExpressionDebounced = (0, _useDebounce.default)(effectiveQueryExpression, stateRecalledDebounced ? 500 : 0);
|
|
128
|
+
const datasetObjectSearchQueryExpression = queryExpressionDebounced != 'false' ? (0, _itemQueryUtils.getRegisterItemQuery)(queryExpressionDebounced, changeRequest ?? undefined) : 'return false';
|
|
129
|
+
return (0, _react2.jsx)("div", {
|
|
130
|
+
css: (0, _react2.css)`display: flex; flex-flow: column nowrap;`,
|
|
131
|
+
className: className,
|
|
132
|
+
style: style
|
|
133
|
+
}, (0, _react2.jsx)(_SearchQuery.default, {
|
|
134
|
+
rootCriteria: state.query.criteria,
|
|
135
|
+
quickSearchString: state.quickSubstringQuery,
|
|
136
|
+
availableClassIDs: availableClassIDs,
|
|
137
|
+
onCriteriaChange: criteria => dispatch({
|
|
138
|
+
type: 'update-query',
|
|
139
|
+
payload: {
|
|
140
|
+
query: {
|
|
141
|
+
criteria
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}),
|
|
145
|
+
onQuickSearchStringChange: substring => dispatch({
|
|
146
|
+
type: 'update-quick-substring-query',
|
|
147
|
+
payload: {
|
|
148
|
+
substring
|
|
149
|
+
}
|
|
150
|
+
}),
|
|
151
|
+
css: (0, _react2.css)`padding: 5px;`
|
|
152
|
+
}), (0, _react2.jsx)("div", {
|
|
153
|
+
css: (0, _react2.css)`flex: 1;`
|
|
154
|
+
}, stateRecalledDebounced ? (0, _react2.jsx)(SearchResultList, {
|
|
155
|
+
queryExpression: datasetObjectSearchQueryExpression,
|
|
156
|
+
keyExpression: keyExpression,
|
|
157
|
+
selectedItemPath: state.selectedItemPath,
|
|
158
|
+
onSelectItem: itemPath => dispatch({
|
|
159
|
+
type: 'select-item',
|
|
160
|
+
payload: {
|
|
161
|
+
itemPath
|
|
162
|
+
}
|
|
163
|
+
}),
|
|
164
|
+
onOpenItem: onOpenItem ?? (itemPath => spawnTab(`${_protocolRegistry.Protocols.ITEM_DETAILS}:${itemPath}`))
|
|
165
|
+
}) : null));
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
const SearchResultList = (0, _SearchResultList.default)(_ListItem.default, objPath => ({
|
|
169
|
+
name: 'reg. item',
|
|
170
|
+
iconProps: {
|
|
171
|
+
icon: 'document',
|
|
172
|
+
title: objPath,
|
|
173
|
+
htmlTitle: `Icon for item at ${objPath}`
|
|
174
|
+
}
|
|
175
|
+
}));
|
|
176
|
+
var _default = Search;
|
|
177
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
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, { useContext, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport useDebounce from '@riboseinc/paneron-extension-kit/useDebounce';\nimport { type CriteriaGroup, BLANK_CRITERIA } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport { RAW_SUBSTRING } from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { ChangeRequestContext } from '../../change-request/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}\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 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 stateName?: string\n\n className?: string\n style?: React.CSSProperties\n}> =\nfunction ({ implicitCriteria, availableClassIDs, stateName, onOpenItem, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { keyExpression, itemClasses, subregisters, selectedRegisterItem } = useContext(BrowserCtx);\n const { changeRequest } = useContext(ChangeRequestContext);\n\n const initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\n };\n\n const [ state, dispatch, stateRecalled ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'search-sidebar',\n undefined,\n undefined,\n (prevState, 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 initialState,\n null);\n\n const selectedItemPath = selectedRegisterItem?.ref\n ? itemRefToItemPath(selectedRegisterItem.ref, changeRequest?.id)\n : null;\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath]);\n\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n const withSearchString: CriteriaGroup = state.query.criteria.criteria.length < 1 && quickSearchString !== ''\n ? {\n require: 'all',\n criteria: [\n {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters }),\n },\n ],\n }\n : state.query.criteria;\n\n const withImplicit: CriteriaGroup = implicitCriteria\n ? {\n require: 'all',\n criteria: [ implicitCriteria, withSearchString ],\n }\n : withSearchString;\n\n const effectiveQueryExpression = withImplicit.criteria.length > 0\n ? criteriaGroupToQueryExpression(withImplicit)\n // If no criteria provided, don’t show anything by default.\n : 'false';\n\n const stateRecalledDebounced = useDebounce(stateRecalled, 100);\n const queryExpressionDebounced = useDebounce(\n effectiveQueryExpression,\n stateRecalledDebounced ? 500 : 0,\n );\n\n const datasetObjectSearchQueryExpression = queryExpressionDebounced != 'false'\n ? getRegisterItemQuery(queryExpressionDebounced, changeRequest ?? undefined)\n : 'return false';\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={criteria => dispatch({ type: 'update-query', payload: { query: { criteria } } })}\n onQuickSearchStringChange={substring => dispatch({ type: 'update-quick-substring-query', payload: { substring } })}\n css={css`padding: 5px;`}\n />\n <div css={css`flex: 1;`}>\n {stateRecalledDebounced\n ? <SearchResultList\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={itemPath => dispatch({ type: 'select-item', payload: { itemPath }})}\n onOpenItem={onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`))}\n />\n : null}\n </div>\n </div>\n );\n};\n\n\nconst SearchResultList = 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"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import type { SuperSidebarConfig } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/types';
|
|
4
|
+
export declare const sidebarIDs: readonly ["Browse", "Registration", "Export"];
|
|
5
|
+
export declare type SidebarID = typeof sidebarIDs[number];
|
|
6
|
+
export declare const sidebarConfig: SuperSidebarConfig<SidebarID>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.sidebarConfig = exports.sidebarIDs = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _react2 = require("@emotion/react");
|
|
11
|
+
|
|
12
|
+
var _core = require("@blueprintjs/core");
|
|
13
|
+
|
|
14
|
+
var _HelpTooltip = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/HelpTooltip"));
|
|
15
|
+
|
|
16
|
+
var _Browse = _interopRequireDefault(require("./Browse"));
|
|
17
|
+
|
|
18
|
+
var _Search = _interopRequireDefault(require("./Search"));
|
|
19
|
+
|
|
20
|
+
var _Registration = require("./Registration");
|
|
21
|
+
|
|
22
|
+
var _Export = _interopRequireDefault(require("./Export"));
|
|
23
|
+
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
+
|
|
26
|
+
/** @jsx jsx */
|
|
27
|
+
|
|
28
|
+
/** @jsxFrag React.Fragment */
|
|
29
|
+
const sidebarIDs = ['Browse', 'Registration', 'Export'];
|
|
30
|
+
exports.sidebarIDs = sidebarIDs;
|
|
31
|
+
const sidebarConfig = {
|
|
32
|
+
Browse: {
|
|
33
|
+
icon: () => (0, _react2.jsx)(_core.Icon, {
|
|
34
|
+
icon: "list"
|
|
35
|
+
}),
|
|
36
|
+
title: "Register items",
|
|
37
|
+
blocks: [{
|
|
38
|
+
key: 'browse',
|
|
39
|
+
title: (0, _react2.jsx)("div", {
|
|
40
|
+
css: (0, _react2.css)`display: flex; justify-content: space-between`
|
|
41
|
+
}, "Preset searches", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
42
|
+
content: "Browse register items by pre-made categories"
|
|
43
|
+
})),
|
|
44
|
+
content: (0, _react2.jsx)(_Browse.default, {
|
|
45
|
+
css: (0, _react2.css)`position: absolute; inset: 0;`
|
|
46
|
+
}),
|
|
47
|
+
nonCollapsible: false,
|
|
48
|
+
// These have to have height specified due to absolute positioning.
|
|
49
|
+
height: 400
|
|
50
|
+
}, {
|
|
51
|
+
key: 'search',
|
|
52
|
+
title: "New search",
|
|
53
|
+
content: (0, _react2.jsx)(_Search.default, {
|
|
54
|
+
css: (0, _react2.css)`position: absolute; inset: 0;`
|
|
55
|
+
}),
|
|
56
|
+
nonCollapsible: false,
|
|
57
|
+
height: 400
|
|
58
|
+
}]
|
|
59
|
+
},
|
|
60
|
+
Registration: {
|
|
61
|
+
icon: () => (0, _react2.jsx)(_core.Icon, {
|
|
62
|
+
icon: "lightbulb"
|
|
63
|
+
}),
|
|
64
|
+
title: "Proposals",
|
|
65
|
+
blocks: [{
|
|
66
|
+
key: 'pending-crs',
|
|
67
|
+
title: (0, _react2.jsx)("div", {
|
|
68
|
+
css: (0, _react2.css)`display: flex; justify-content: space-between`
|
|
69
|
+
}, "Pending proposals", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
70
|
+
content: "Proposals pending decision. If a register item is selected, only proposals affecting that item are shown."
|
|
71
|
+
})),
|
|
72
|
+
content: (0, _react2.jsx)(_Registration.PendingChangeRequestsBlock, null),
|
|
73
|
+
height: 300
|
|
74
|
+
}, {
|
|
75
|
+
key: 'cr-history',
|
|
76
|
+
title: (0, _react2.jsx)("div", {
|
|
77
|
+
css: (0, _react2.css)`display: flex; justify-content: space-between`
|
|
78
|
+
}, "History", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
79
|
+
content: "Resolved proposals. If a register item is selected, only proposals affecting that item are shown."
|
|
80
|
+
})),
|
|
81
|
+
content: (0, _react2.jsx)(_Registration.ChangeRequestHistoryBlock, null),
|
|
82
|
+
height: 300
|
|
83
|
+
}]
|
|
84
|
+
},
|
|
85
|
+
Export: {
|
|
86
|
+
icon: () => (0, _react2.jsx)(_core.Icon, {
|
|
87
|
+
icon: "changes"
|
|
88
|
+
}),
|
|
89
|
+
title: "Import and export",
|
|
90
|
+
blocks: [{
|
|
91
|
+
key: 'export',
|
|
92
|
+
title: "Export",
|
|
93
|
+
content: (0, _react2.jsx)(_Export.default, null),
|
|
94
|
+
nonCollapsible: true
|
|
95
|
+
}, {
|
|
96
|
+
key: 'import',
|
|
97
|
+
title: "Import",
|
|
98
|
+
content: (0, _react2.jsx)(_react.default.Fragment, null, "Import TBD"),
|
|
99
|
+
nonCollapsible: false,
|
|
100
|
+
collapsedByDefault: true
|
|
101
|
+
}]
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
exports.sidebarConfig = sidebarConfig;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/views/sidebar/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,MAAM,MAAM,UAAU,CAAC;AAG9B,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ;IACR,cAAc;IACd,QAAQ;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,aAAa,GAAkC;IAC1D,MAAM,EAAE;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,IAAC,IAAI,IAAC,IAAI,EAAC,MAAM,GAAG;QAChC,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,CAAC;gBACP,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,aAAK,GAAG,EAAE,GAAG,CAAA,+CAA+C;;oBAEjE,IAAC,WAAW,IAAC,OAAO,EAAC,8CAA8C,GAAG,CAClE;gBACN,OAAO,EAAE,IAAC,MAAM,IAAC,GAAG,EAAE,GAAG,CAAA,+BAA+B,GAAI;gBAC5D,cAAc,EAAE,KAAK;gBACrB,mEAAmE;gBACnE,MAAM,EAAE,GAAG;aACZ,EAAE;gBACD,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,IAAC,MAAM,IAAC,GAAG,EAAE,GAAG,CAAA,+BAA+B,GAAI;gBAC5D,cAAc,EAAE,KAAK;gBACrB,MAAM,EAAE,GAAG;aACZ,CAAC;KACH;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,GAAG,EAAE,CAAC,IAAC,IAAI,IAAC,IAAI,EAAC,WAAW,GAAG;QACrC,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,CAAC;gBACP,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,aAAK,GAAG,EAAE,GAAG,CAAA,+CAA+C;;oBAEjE,IAAC,WAAW,IAAC,OAAO,EAAC,2GAA2G,GAAG,CAC/H;gBACN,OAAO,EAAE,IAAC,0BAA0B,OAAG;gBACvC,MAAM,EAAE,GAAG;aACZ,EAAE;gBACD,GAAG,EAAE,YAAY;gBACjB,KAAK,EAAE,aAAK,GAAG,EAAE,GAAG,CAAA,+CAA+C;;oBAEjE,IAAC,WAAW,IAAC,OAAO,EAAC,mGAAmG,GAAG,CACvH;gBACN,OAAO,EAAE,IAAC,yBAAyB,OAAG;gBACtC,MAAM,EAAE,GAAG;aACZ,CAAC;KACH;IACD,MAAM,EAAE;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,IAAC,IAAI,IAAC,IAAI,EAAC,SAAS,GAAG;QACnC,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,CAAC;gBACP,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,IAAC,MAAM,OAAG;gBACnB,cAAc,EAAE,IAAI;aACrB,EAAE;gBACD,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,uCAAe;gBACxB,cAAc,EAAE,KAAK;gBACrB,kBAAkB,EAAE,IAAI;aACzB,CAAC;KACH;CACF,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Icon } from '@blueprintjs/core';\n\nimport type { SuperSidebarConfig } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/types';\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\n\nimport Browse from './Browse';\nimport Search from './Search';\nimport { PendingChangeRequestsBlock, ChangeRequestHistoryBlock } from './Registration';\nimport Export from './Export';\n\n\nexport const sidebarIDs = [\n 'Browse',\n 'Registration',\n 'Export',\n] as const;\n\nexport type SidebarID = typeof sidebarIDs[number];\n\nexport const sidebarConfig: SuperSidebarConfig<SidebarID> = {\n Browse: {\n icon: () => <Icon icon=\"list\" />,\n title: \"Register items\",\n blocks: [{\n key: 'browse',\n title: <div css={css`display: flex; justify-content: space-between`}>\n Preset searches\n <HelpTooltip content=\"Browse register items by pre-made categories\" />\n </div>,\n content: <Browse css={css`position: absolute; inset: 0;`} />,\n nonCollapsible: false,\n // These have to have height specified due to absolute positioning.\n height: 400,\n }, {\n key: 'search',\n title: \"New search\",\n content: <Search css={css`position: absolute; inset: 0;`} />,\n nonCollapsible: false,\n height: 400,\n }],\n },\n Registration: {\n icon: () => <Icon icon=\"lightbulb\" />,\n title: \"Proposals\",\n blocks: [{\n key: 'pending-crs',\n title: <div css={css`display: flex; justify-content: space-between`}>\n Pending proposals\n <HelpTooltip content=\"Proposals pending decision. If a register item is selected, only proposals affecting that item are shown.\" />\n </div>,\n content: <PendingChangeRequestsBlock />,\n height: 300,\n }, {\n key: 'cr-history',\n title: <div css={css`display: flex; justify-content: space-between`}>\n History\n <HelpTooltip content=\"Resolved proposals. If a register item is selected, only proposals affecting that item are shown.\" />\n </div>,\n content: <ChangeRequestHistoryBlock />,\n height: 300,\n }],\n },\n Export: {\n icon: () => <Icon icon=\"changes\" />,\n title: \"Import and export\",\n blocks: [{\n key: 'export',\n title: \"Export\",\n content: <Export />,\n nonCollapsible: true,\n }, {\n key: 'import',\n title: \"Import\",\n content: <>Import TBD</>,\n nonCollapsible: false,\n collapsedByDefault: true,\n }],\n },\n};\n"]}
|
package/views/util.d.ts
CHANGED
|
@@ -1,12 +1,36 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
/** @jsxFrag React.Fragment */
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { HelmetProps } from 'react-helmet';
|
|
5
|
+
import { FormGroupProps } from '@blueprintjs/core';
|
|
6
|
+
import type { ItemClassConfiguration, RelatedItemClassConfiguration } from '../types';
|
|
6
7
|
export { GenericRelatedItemView } from './GenericRelatedItemView';
|
|
8
|
+
/**
|
|
9
|
+
* Get give string truncated & with ellipsis appended
|
|
10
|
+
* if its length exceeds given number of characters.
|
|
11
|
+
*/
|
|
12
|
+
export declare function maybeEllipsizeString(str: string, maxLength?: number): string;
|
|
13
|
+
export declare const RegisterHelmet: React.FC<HelmetProps>;
|
|
7
14
|
export declare const PropertyDetailView: React.FC<{
|
|
8
|
-
title:
|
|
9
|
-
secondaryTitle?:
|
|
10
|
-
inline?:
|
|
15
|
+
title: FormGroupProps["label"];
|
|
16
|
+
secondaryTitle?: FormGroupProps["labelInfo"];
|
|
17
|
+
inline?: FormGroupProps["inline"];
|
|
11
18
|
}>;
|
|
19
|
+
/** Formats given date as a span with tooltip set to full ISO date & time. */
|
|
20
|
+
export declare const Datestamp: React.FC<{
|
|
21
|
+
date: Date;
|
|
22
|
+
title?: string;
|
|
23
|
+
className?: string;
|
|
24
|
+
}>;
|
|
25
|
+
/** Foramts given date as plain text. */
|
|
26
|
+
export declare function formatDate(date: Date): string;
|
|
12
27
|
export declare const _getRelatedClass: (classes: Record<string, ItemClassConfiguration<any>>) => (clsID: string) => RelatedItemClassConfiguration;
|
|
28
|
+
/**
|
|
29
|
+
* Suitable for use as tab contents for TabbedWorkspace.
|
|
30
|
+
* Provides top bar with actions and main content.
|
|
31
|
+
*/
|
|
32
|
+
export declare const TabContentsWithActions: React.FC<{
|
|
33
|
+
actions: JSX.Element;
|
|
34
|
+
main: JSX.Element;
|
|
35
|
+
className?: string;
|
|
36
|
+
}>;
|