@riboseinc/paneron-registry-kit 2.2.10 → 2.2.12
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/index.d.ts +2 -4
- package/index.js +18 -0
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/site-builder/index.d.ts +3 -0
- package/site-builder/index.js +75 -0
- package/site-builder/index.js.map +1 -0
- package/site-builder/jsx-runtime.d.ts +18 -0
- package/site-builder/jsx-runtime.js +107 -0
- package/site-builder/jsx-runtime.js.map +1 -0
- package/site-builder/page.d.ts +6 -0
- package/site-builder/page.js +24 -0
- package/site-builder/page.js.map +1 -0
- package/types/cr.d.ts +22 -0
- package/types/cr.js +41 -1
- package/types/cr.js.map +1 -1
- package/types/item.d.ts +1 -1
- package/types/item.js.map +1 -1
- package/types/stakeholder.d.ts +3 -1
- package/types/stakeholder.js +20 -0
- package/types/stakeholder.js.map +1 -1
- package/types/util.d.ts +2 -0
- package/types/util.js.map +1 -1
- package/types/views.d.ts +22 -0
- package/types/views.js.map +1 -1
- package/views/AnnotatedChange.js +7 -5
- package/views/AnnotatedChange.js.map +1 -1
- package/views/BrowserCtx.d.ts +3 -11
- package/views/BrowserCtx.js +1 -0
- package/views/BrowserCtx.js.map +1 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.d.ts +1 -1
- package/views/FilterCriteria/criteriaGroupToQueryExpression.js.map +1 -1
- package/views/FilterCriteria/models.d.ts +1 -1
- package/views/FilterCriteria/models.js.map +1 -1
- package/views/GenericRelatedItemView.js +11 -51
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/ItemDrawer.d.ts +11 -0
- package/views/ItemDrawer.js +69 -0
- package/views/ItemDrawer.js.map +1 -0
- package/views/SearchQuery.js +25 -14
- package/views/SearchQuery.js.map +1 -1
- package/views/change-request/ChangeProposalContext.d.ts +3 -0
- package/views/change-request/ChangeProposalContext.js +4 -0
- package/views/change-request/ChangeProposalContext.js.map +1 -0
- package/views/change-request/ChangeRequestContext.d.ts +18 -2
- package/views/change-request/ChangeRequestContext.js +29 -5
- package/views/change-request/ChangeRequestContext.js.map +1 -1
- package/views/change-request/Proposals.d.ts +2 -0
- package/views/change-request/Proposals.js +116 -80
- package/views/change-request/Proposals.js.map +1 -1
- package/views/change-request/State.d.ts +0 -0
- package/views/change-request/State.js +1 -0
- package/views/change-request/State.js.map +1 -0
- package/views/change-request/Summary.d.ts +12 -0
- package/views/change-request/Summary.js +59 -0
- package/views/change-request/Summary.js.map +1 -0
- package/views/change-request/TransitionHistory.d.ts +30 -0
- package/views/change-request/TransitionHistory.js +307 -0
- package/views/change-request/TransitionHistory.js.map +1 -0
- package/views/change-request/TransitionOptions.d.ts +38 -0
- package/views/{detail/ChangeRequest/transitions.js → change-request/TransitionOptions.js} +61 -51
- package/views/change-request/TransitionOptions.js.map +1 -0
- package/views/change-request/objectChangeset.d.ts +7 -4
- package/views/change-request/objectChangeset.js +60 -23
- package/views/change-request/objectChangeset.js.map +1 -1
- package/views/detail/ChangeRequest/index.js +129 -142
- package/views/detail/ChangeRequest/index.js.map +1 -1
- package/views/detail/RegisterHome/ActiveProposalDetails.d.ts +15 -0
- package/views/detail/RegisterHome/ActiveProposalDetails.js +104 -0
- package/views/detail/RegisterHome/ActiveProposalDetails.js.map +1 -0
- package/views/detail/RegisterHome/Block.d.ts +19 -0
- package/views/detail/RegisterHome/Block.js +49 -0
- package/views/detail/RegisterHome/Block.js.map +1 -0
- package/views/detail/RegisterHome/MetaSummary.d.ts +9 -0
- package/views/detail/RegisterHome/MetaSummary.js +39 -0
- package/views/detail/RegisterHome/MetaSummary.js.map +1 -0
- package/views/detail/RegisterHome/Proposal.d.ts +14 -0
- package/views/detail/RegisterHome/Proposal.js +296 -0
- package/views/detail/RegisterHome/Proposal.js.map +1 -0
- package/views/detail/RegisterHome/index.js +345 -141
- package/views/detail/RegisterHome/index.js.map +1 -1
- package/views/detail/RegisterItem/index.d.ts +2 -3
- package/views/detail/RegisterItem/index.js +238 -140
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/detail/RegisterMeta/RegisterMetaForm.js +37 -45
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
- package/views/detail/RegisterMeta/index.js +14 -11
- package/views/detail/RegisterMeta/index.js.map +1 -1
- package/views/diffing/InlineDiff.d.ts +27 -1
- package/views/diffing/InlineDiff.js +113 -2
- package/views/diffing/InlineDiff.js.map +1 -1
- package/views/hooks/useCustomView.js +1 -1
- package/views/hooks/useCustomView.js.map +1 -1
- package/views/index.js +4 -2
- package/views/index.js.map +1 -1
- package/views/sidebar/Search/index.js +12 -2
- package/views/sidebar/Search/index.js.map +1 -1
- package/views/util.d.ts +43 -6
- package/views/util.js +240 -11
- package/views/util.js.map +1 -1
- package/views/detail/ChangeRequest/transitions.d.ts +0 -28
- package/views/detail/ChangeRequest/transitions.js.map +0 -1
|
@@ -3,16 +3,24 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = void 0;
|
|
6
|
+
exports.default = exports.InlineDiffGeneric = exports.Val = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = require("@emotion/react");
|
|
9
9
|
|
|
10
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
11
|
+
|
|
10
12
|
var _react2 = _interopRequireDefault(require("react"));
|
|
11
13
|
|
|
12
14
|
var _server = _interopRequireDefault(require("react-dom/server"));
|
|
13
15
|
|
|
14
16
|
var _reactVisualDiff = _interopRequireDefault(require("react-visual-diff"));
|
|
15
17
|
|
|
18
|
+
var _core = require("@blueprintjs/core");
|
|
19
|
+
|
|
20
|
+
var _DL = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/DL"));
|
|
21
|
+
|
|
22
|
+
var _util = require("@riboseinc/paneron-extension-kit/util");
|
|
23
|
+
|
|
16
24
|
var _AnnotatedChange = _interopRequireDefault(require("../AnnotatedChange"));
|
|
17
25
|
|
|
18
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -20,6 +28,23 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
20
28
|
/** @jsx jsx */
|
|
21
29
|
|
|
22
30
|
/** @jsxFrag React.Fragment */
|
|
31
|
+
const UnstyledOL = (0, _styled.default)(_core.OL)`
|
|
32
|
+
margin: 0 !important;
|
|
33
|
+
> li {
|
|
34
|
+
margin: 0 !important;
|
|
35
|
+
}
|
|
36
|
+
::marker {
|
|
37
|
+
font-weight: bold;
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
const ComplexDL = (0, _styled.default)(_DL.default)`
|
|
41
|
+
/* Within Blueprint’s running text container, we can get away with zero vertical padding. */
|
|
42
|
+
padding: 0 4px;
|
|
43
|
+
border: 1px solid rgba(125, 125, 125, 0.5);
|
|
44
|
+
border-radius: 0 0 15px 0;
|
|
45
|
+
margin: -1px -5px;
|
|
46
|
+
`;
|
|
47
|
+
|
|
23
48
|
const InlineDiff = _react2.default.memo(({
|
|
24
49
|
DetailView,
|
|
25
50
|
sharedRefComponents,
|
|
@@ -52,7 +77,93 @@ const InlineDiff = _react2.default.memo(({
|
|
|
52
77
|
right: right,
|
|
53
78
|
renderChange: _AnnotatedChange.default
|
|
54
79
|
});
|
|
55
|
-
}, (prevProps, nextProps) => JSON.stringify(prevProps.item2) === JSON.stringify(nextProps.item2) && JSON.stringify(prevProps.item1) === JSON.stringify(nextProps.item1));
|
|
80
|
+
}, (prevProps, nextProps) => JSON.stringify(prevProps.item2) === JSON.stringify(nextProps.item2) && JSON.stringify(prevProps.item1) === JSON.stringify(nextProps.item1)); // /** Returns true if a value or any nested value within, recursively, is considered “not empty”. */
|
|
81
|
+
// function isNonEmptyRecursive(val: any): boolean {
|
|
82
|
+
// if (Array.isArray(val)) {
|
|
83
|
+
// // TODO: Should really do this on arrays?
|
|
84
|
+
// return val.find(item => isNonEmptyRecursive(item)) !== undefined;
|
|
85
|
+
// } else if (isObject(val)) {
|
|
86
|
+
// return Object.values(val).find(item => isNonEmptyRecursive(item)) !== undefined;
|
|
87
|
+
// } else {
|
|
88
|
+
// return isNonEmpty(val);
|
|
89
|
+
// }
|
|
90
|
+
// }
|
|
91
|
+
|
|
92
|
+
/** Returns true if a value is considered “not empty”. */
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
function isNonEmpty(val) {
|
|
96
|
+
var _a, _b;
|
|
97
|
+
|
|
98
|
+
return val && (typeof val === 'string' ? val.trim() !== '' : ((_b = (_a = val === null || val === void 0 ? void 0 : val.toString()) === null || _a === void 0 ? void 0 : _a.trim) === null || _b === void 0 ? void 0 : _b.call(_a)) || `${val}`);
|
|
99
|
+
}
|
|
100
|
+
/** Renders given value in a recursive way. */
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
const Val = function ({
|
|
104
|
+
val,
|
|
105
|
+
hideEmpty
|
|
106
|
+
}) {
|
|
107
|
+
var _a;
|
|
108
|
+
|
|
109
|
+
if (Array.isArray(val)) {
|
|
110
|
+
return (0, _react.jsx)(UnstyledOL, null, val.map((v, idx) => (0, _react.jsx)("li", {
|
|
111
|
+
key: idx
|
|
112
|
+
}, (0, _util.isObject)(val) ? (0, _react.jsx)(_react2.default.Fragment, null, "\u2192") : null, (0, _react.jsx)(Val, {
|
|
113
|
+
val: v,
|
|
114
|
+
hideEmpty: hideEmpty
|
|
115
|
+
}))));
|
|
116
|
+
} else if ((0, _util.isObject)(val)) {
|
|
117
|
+
const allEntries = Object.entries(val);
|
|
118
|
+
const entries = hideEmpty ? allEntries.filter(([, v]) => isNonEmpty(v)) : allEntries;
|
|
119
|
+
const omittedCount = hideEmpty ? allEntries.length - entries.length : 0;
|
|
120
|
+
const Comp = entries.length > 1 ? ComplexDL : _DL.default;
|
|
121
|
+
return (0, _react.jsx)(Comp, null, (omittedCount > 1 ? entries : allEntries).sort().map(([key, val]) => (0, _react.jsx)("div", {
|
|
122
|
+
key: key
|
|
123
|
+
}, (0, _react.jsx)("dt", null, key, (0, _util.isObject)(val) ? (0, _react.jsx)(_react2.default.Fragment, null, " \u2192") : ': '), (0, _react.jsx)("dd", null, (0, _react.jsx)(Val, {
|
|
124
|
+
val: val,
|
|
125
|
+
hideEmpty: hideEmpty
|
|
126
|
+
})))), omittedCount > 1 ? (0, _react.jsx)(MetaDLRow, null, (0, _react.jsx)("dt", null, "empty properties omitted:"), (0, _react.jsx)("dd", null, (0, _react.jsx)("code", null, omittedCount))) : null);
|
|
127
|
+
} else {
|
|
128
|
+
const valString = typeof val === 'string' ? val : (_a = val === null || val === void 0 ? void 0 : val.toString()) !== null && _a !== void 0 ? _a : '';
|
|
129
|
+
return typeof val === 'string' ? (0, _react.jsx)(_react2.default.Fragment, null, valString) : (0, _react.jsx)("code", null, valString.trim() || `${val}`);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
exports.Val = Val;
|
|
134
|
+
const MetaDLRow = _styled.default.div`
|
|
135
|
+
opacity: 0.7;
|
|
136
|
+
> dt {
|
|
137
|
+
font-weight: normal;
|
|
138
|
+
font-style: italic;
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
|
|
142
|
+
const InlineDiffGeneric = _react2.default.memo(function ({
|
|
143
|
+
item1,
|
|
144
|
+
item2,
|
|
145
|
+
omitEmpty,
|
|
146
|
+
className
|
|
147
|
+
}) {
|
|
148
|
+
const left = (0, _react.jsx)(Val, {
|
|
149
|
+
val: (0, _util.normalizeObjectRecursively)(item1),
|
|
150
|
+
hideEmpty: omitEmpty
|
|
151
|
+
});
|
|
152
|
+
const right = (0, _react.jsx)(Val, {
|
|
153
|
+
val: (0, _util.normalizeObjectRecursively)(item2),
|
|
154
|
+
hideEmpty: omitEmpty
|
|
155
|
+
});
|
|
156
|
+
return (0, _react.jsx)("div", {
|
|
157
|
+
className: className
|
|
158
|
+
}, (0, _react.jsx)(_reactVisualDiff.default, {
|
|
159
|
+
left: left,
|
|
160
|
+
right: right,
|
|
161
|
+
//left={<Val val={normalizeObjectRecursively(item1)} />}
|
|
162
|
+
//right={<Val val={normalizeObjectRecursively(item2)} />}
|
|
163
|
+
renderChange: _AnnotatedChange.default
|
|
164
|
+
}));
|
|
165
|
+
}, (prevProps, nextProps) => (0, _util.objectsHaveSameShape)(prevProps.item2, nextProps.item2) && (0, _util.objectsHaveSameShape)(prevProps.item1, nextProps.item1));
|
|
56
166
|
|
|
167
|
+
exports.InlineDiffGeneric = InlineDiffGeneric;
|
|
57
168
|
var _default = InlineDiff;
|
|
58
169
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineDiff.js","sourceRoot":"","sources":["../../../src/views/diffing/InlineDiff.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AACxC,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAG3C,OAAO,eAAe,MAAM,oBAAoB,CAAC;AAGjD,MAAM,UAAU,GAKX,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IACpE,iGAAiG;IACjG,mDAAmD;IACnD,yFAAyF;IACzF,0EAA0E;IAE1E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,aAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAC,UAAU,IACpF,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,KAAK,GACf,CAAC,EAAE,GAAI,CAAA;IACX,MAAM,KAAK,GAAG,aAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAC,UAAU,IACrF,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,KAAK,GACf,CAAC,EAAE,GAAI,CAAA;IAEX,OAAO,IAAC,UAAU,IAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,eAAe,GAAI,CAAC;AACtC,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CACpE,CAAC;AAGF,eAAe,UAAU,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport React from 'react';\nimport ReactDOM from 'react-dom/server';\nimport VisualDiff from 'react-visual-diff';\nimport { InternalItemReference, RegisterItem, Payload } from '../../types/item';\nimport { ItemDetailView } from '../../types/views';\nimport AnnotatedChange from '../AnnotatedChange';\n\n\nconst InlineDiff: React.FC<{\n DetailView: ItemDetailView<Payload>\n sharedRefComponents: Omit<InternalItemReference, 'itemID'>\n item1: RegisterItem<any>[\"data\"]\n item2: RegisterItem<any>[\"data\"]\n}> = React.memo(({ DetailView, sharedRefComponents, item1, item2 }) => {\n // TODO: Make VisualDiff work. Currently, it doesn’t apparently when item detail views use hooks.\n // Which is often. Either make item views hook-free\n // (which means primarily eliminating useRegisterItemData() by inferring and pre-fetching\n // related item data), or work out another way to diff two React elements.\n\n console.debug(item1.description, item2.description);\n \n const left = <div dangerouslySetInnerHTML={{ __html: ReactDOM.renderToString(<DetailView\n itemRef={sharedRefComponents}\n itemData={item1}\n />) }} />\n const right = <div dangerouslySetInnerHTML={{ __html: ReactDOM.renderToString(<DetailView\n itemRef={sharedRefComponents}\n itemData={item2}\n />) }} />\n\n return <VisualDiff\n left={left}\n right={right}\n renderChange={AnnotatedChange} />;\n}, (prevProps, nextProps) =>\n JSON.stringify(prevProps.item2) === JSON.stringify(nextProps.item2) &&\n JSON.stringify(prevProps.item1) === JSON.stringify(nextProps.item1)\n);\n\n\nexport default InlineDiff;\n"]}
|
|
1
|
+
{"version":3,"file":"InlineDiff.js","sourceRoot":"","sources":["../../../src/views/diffing/InlineDiff.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport React from 'react';\nimport ReactDOM from 'react-dom/server';\nimport VisualDiff from 'react-visual-diff';\nimport { OL } from '@blueprintjs/core';\nimport DL from '@riboseinc/paneron-extension-kit/widgets/DL';\nimport { objectsHaveSameShape, normalizeObjectRecursively, isObject } from '@riboseinc/paneron-extension-kit/util';\nimport type { InternalItemReference, RegisterItem, Payload } from '../../types/item';\nimport { ItemDetailView } from '../../types/views';\nimport AnnotatedChange from '../AnnotatedChange';\n\n\nconst UnstyledOL = styled(OL)`\n margin: 0 !important;\n > li {\n margin: 0 !important;\n }\n ::marker {\n font-weight: bold;\n }\n`;\n\nconst ComplexDL = styled(DL)`\n /* Within Blueprint’s running text container, we can get away with zero vertical padding. */\n padding: 0 4px;\n border: 1px solid rgba(125, 125, 125, 0.5);\n border-radius: 0 0 15px 0;\n margin: -1px -5px;\n`;\n\n\nconst InlineDiff: React.FC<{\n DetailView: ItemDetailView<Payload>\n sharedRefComponents: Omit<InternalItemReference, 'itemID'>\n item1: RegisterItem<any>[\"data\"]\n item2: RegisterItem<any>[\"data\"]\n}> = React.memo(({ DetailView, sharedRefComponents, item1, item2 }) => {\n // TODO: Make VisualDiff work. Currently, it doesn’t apparently when item detail views use hooks.\n // Which is often. Either make item views hook-free\n // (which means primarily eliminating useRegisterItemData() by inferring and pre-fetching\n // related item data), or work out another way to diff two React elements.\n\n console.debug(item1.description, item2.description);\n \n const left = <div dangerouslySetInnerHTML={{ __html: ReactDOM.renderToString(<DetailView\n itemRef={sharedRefComponents}\n itemData={item1}\n />) }} />\n const right = <div dangerouslySetInnerHTML={{ __html: ReactDOM.renderToString(<DetailView\n itemRef={sharedRefComponents}\n itemData={item2}\n />) }} />\n\n return <VisualDiff\n left={left}\n right={right}\n renderChange={AnnotatedChange}\n />;\n}, (prevProps, nextProps) =>\n JSON.stringify(prevProps.item2) === JSON.stringify(nextProps.item2) &&\n JSON.stringify(prevProps.item1) === JSON.stringify(nextProps.item1)\n);\n\n\n// /** Returns true if a value or any nested value within, recursively, is considered “not empty”. */\n// function isNonEmptyRecursive(val: any): boolean {\n// if (Array.isArray(val)) {\n// // TODO: Should really do this on arrays?\n// return val.find(item => isNonEmptyRecursive(item)) !== undefined;\n// } else if (isObject(val)) {\n// return Object.values(val).find(item => isNonEmptyRecursive(item)) !== undefined;\n// } else {\n// return isNonEmpty(val);\n// }\n// }\n\n\n/** Returns true if a value is considered “not empty”. */\nfunction isNonEmpty(val: any): boolean {\n return val && (typeof val === 'string'\n ? val.trim() !== ''\n : val?.toString()?.trim?.() || `${val}`);\n}\n\n\n/** Renders given value in a recursive way. */\nexport const Val: React.VoidFunctionComponent<{\n val: any\n\n /**\n * Omit nulls, undefined and empty strings in object values.\n *\n * See `isNonEmpty()`.\n *\n * NOTE: Doesn’t work work well if you are annotating changed properties\n * and one of the hidden properties was changed.\n */\n hideEmpty?: boolean\n}> = function ({ val, hideEmpty }) {\n if (Array.isArray(val)) {\n return (\n <UnstyledOL>\n {val.map((v, idx) =>\n <li key={idx}>\n {isObject(val) ? <>→</> : null}\n <Val val={v} hideEmpty={hideEmpty} />\n </li>\n )}\n </UnstyledOL>\n );\n\n } else if (isObject(val)) {\n const allEntries = Object.entries(val);\n\n const entries = hideEmpty\n ? allEntries.filter(([, v]) => isNonEmpty(v))\n : allEntries;\n\n const omittedCount = hideEmpty\n ? allEntries.length - entries.length\n : 0;\n\n const Comp = entries.length > 1\n ? ComplexDL\n : DL;\n\n return (\n <Comp>\n {(omittedCount > 1 ? entries : allEntries).sort().map(([key, val]) =>\n <div key={key}>\n <dt>{key}{isObject(val) ? <> →</> : ': '}</dt>\n <dd>\n <Val val={val} hideEmpty={hideEmpty} />\n </dd>\n </div>\n )}\n {omittedCount > 1\n ? <MetaDLRow>\n <dt>empty properties omitted:</dt>\n <dd><code>{omittedCount}</code></dd>\n </MetaDLRow>\n : null}\n </Comp>\n );\n\n } else {\n const valString = typeof val === 'string'\n ? val\n : val?.toString() ?? '';\n return typeof val === 'string'\n ? <>{valString}</>\n : <code>{valString.trim() || `${val}`}</code>;\n }\n};\n\n\nconst MetaDLRow = styled.div`\n opacity: 0.7;\n > dt {\n font-weight: normal;\n font-style: italic;\n }\n`\n\n\nexport const InlineDiffGeneric: React.FC<{\n item1: Record<string, any>\n item2: Record<string, any>\n\n /**\n * Don’t show properties with empty values to save space.\n *\n * NOTE: WIP. Doesn’t work work well if one of the hidden properties was changed.\n */\n omitEmpty?: boolean\n\n /** Omit unchanged properties (not supported yet). */\n showOnlyChanged?: boolean\n\n className?: string\n}> = React.memo(function ({ item1, item2, omitEmpty, className }) {\n const left = \n <Val val={normalizeObjectRecursively(item1)} hideEmpty={omitEmpty} />;\n const right =\n <Val val={normalizeObjectRecursively(item2)} hideEmpty={omitEmpty} />;\n\n return (\n <div className={className}>\n <VisualDiff\n left={left}\n right={right}\n //left={<Val val={normalizeObjectRecursively(item1)} />}\n //right={<Val val={normalizeObjectRecursively(item2)} />}\n renderChange={AnnotatedChange}\n />\n </div>\n );\n}, (prevProps, nextProps) =>\n objectsHaveSameShape(prevProps.item2, nextProps.item2) &&\n objectsHaveSameShape(prevProps.item1, nextProps.item1)\n);\n\n\nexport default InlineDiff;\n"]}
|
|
@@ -13,7 +13,7 @@ function useCustomView(viewID) {
|
|
|
13
13
|
const {
|
|
14
14
|
customViews
|
|
15
15
|
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
16
|
-
const view = customViews.find(v => v.id === viewID);
|
|
16
|
+
const view = (customViews !== null && customViews !== void 0 ? customViews : []).find(v => v.id === viewID);
|
|
17
17
|
return {
|
|
18
18
|
value: view,
|
|
19
19
|
errors: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomView.js","sourceRoot":"","sources":["../../../src/views/hooks/useCustomView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAc;IAElD,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useCustomView.js","sourceRoot":"","sources":["../../../src/views/hooks/useCustomView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,MAAc;IAElD,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC5D,OAAO;QACL,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;QACrB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC","sourcesContent":["import { useContext } from 'react';\nimport type { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { BrowserCtx } from '../BrowserCtx';\nimport type { CustomViewConfiguration } from '../../types';\n\n\nexport default function useCustomView(viewID: string):\nValueHook<CustomViewConfiguration | undefined> {\n const { customViews } = useContext(BrowserCtx);\n const view = (customViews ?? []).find(v => v.id === viewID);\n return {\n value: view,\n errors: [],\n refresh: () => void 0,\n isUpdating: false,\n _reqCounter: 0,\n };\n}\n"]}
|
package/views/index.js
CHANGED
|
@@ -115,6 +115,7 @@ const BrowserCtxProvider = function BrowserCtxProvider({
|
|
|
115
115
|
subregisters,
|
|
116
116
|
keyExpression,
|
|
117
117
|
defaultSearchCriteria,
|
|
118
|
+
getQuickSearchPredicate,
|
|
118
119
|
customViews,
|
|
119
120
|
children
|
|
120
121
|
}) {
|
|
@@ -228,8 +229,9 @@ const BrowserCtxProvider = function BrowserCtxProvider({
|
|
|
228
229
|
getRelatedItemClassConfiguration,
|
|
229
230
|
customViews: customViewsMemoized,
|
|
230
231
|
keyExpression,
|
|
231
|
-
defaultSearchCriteria
|
|
232
|
-
|
|
232
|
+
defaultSearchCriteria,
|
|
233
|
+
getQuickSearchPredicate
|
|
234
|
+
}), [selectedRegisterItem, activeChangeRequestIDDebounced, stakeholder, registerMetadata, remoteUsername, subregisters, spawnTab, useRegisterItemData, customViewsMemoized, itemClassConfiguration, subregisters, keyExpression, defaultSearchCriteria, getQuickSearchPredicate])
|
|
233
235
|
}, (0, _react2.jsx)(_ChangeRequestContext.ChangeRequestContextProvider, {
|
|
234
236
|
changeRequestID: activeChangeRequestIDDebounced
|
|
235
237
|
}, children));
|
package/views/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useCallback, useState, useMemo } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport { jsx, css } from '@emotion/react';\n\nimport type { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport TabbedWorkspace, { type TabbedWorkspaceProps } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace';\nimport {\n makeContextProvider as makeTabbedWorkspaceContextProvider,\n TabbedWorkspaceContext,\n} from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\n\nimport {\n type RegisterItem,\n type RegisterItemDataHook,\n type RegisterStakeholder,\n type RegistryViewProps,\n type InternalItemReference,\n isRegisterItem,\n isRegisterMetadata,\n} from '../types';\n\nimport { REGISTER_METADATA_FILENAME } from '../common';\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\nimport { sidebarConfig, type SidebarID, sidebarIDs } from './sidebar';\nimport { BrowserCtx } from './BrowserCtx';\nimport { _getRelatedClass } from './util';\nimport RegisterHome from './detail/RegisterHome';\nimport protocolRegistry, { Protocols, type Protocol } from './protocolRegistry';\nimport {\n ChangeRequestContext,\n ChangeRequestContextProvider,\n} from './change-request/ChangeRequestContext';\nimport { useItemRef, itemPathInCR } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, SidebarID>(\n 'Browse',\n sidebarIDs,\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> =\nfunction RegistryView (props) {\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <RegistryWorkspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nconst SIDEBAR_WIDTH_SETTING_NAME = 'registryMainSidebarWidthPixels'\n\n\nconst RegistryWorkspace: React.FC<Record<never, never>> =\nfunction RegistryWorkspace () {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\n\n const globalMode: TabbedWorkspaceProps<any>['globalMode'] = useMemo(\n (() => activeChangeRequest\n ? {\n content: <>\n Viewing register as proposed — contents shown may differ from version in effect\n </>,\n intent: 'danger',\n onClick: () => spawnTab(`${Protocols.CHANGE_REQUEST}:/proposals/${activeChangeRequest.id}/main.yaml`),\n }\n : undefined),\n [activeChangeRequest?.id, spawnTab],\n );\n\n const { value: { settings } } = useSettings();\n const { value: { settings: globalSettings } } = useGlobalSettings();\n\n const stored = settings[SIDEBAR_WIDTH_SETTING_NAME];\n const sidebarWidth: number | undefined = stored && typeof stored === 'number'\n ? stored as number\n : undefined;\n\n return <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={sidebarConfig}\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={sidebarIDs}\n newTabPrompt={<RegisterHome />}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={useCallback((width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }, [updateSetting])}\n />\n};\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function BrowserCtxProvider ({\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n customViews,\n children,\n}) {\n\n const { useObjectData, useRemoteUsername } = useContext(DatasetContext);\n const { focusedTabURI, spawnTab } = useContext(TabbedWorkspaceContext);\n\n\n // Active item\n\n const selectedItemPath: string | null = useMemo((() =>\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.ITEM_DETAILS}:`)\n ? focusedTabURI.split(':')[1]\n : null\n ), [focusedTabURI]);\n\n const selectedItemRef: InternalItemReference | null = useItemRef(\n subregisters !== undefined,\n selectedItemPath);\n\n const maybeSelectedRegisterItemData: Record<string, any> | null = useObjectData({\n objectPaths: selectedItemPath ? [selectedItemPath] : [],\n }).value.data[selectedItemPath ?? ''];\n\n const selectedRegisterItem: BrowserCtx['selectedRegisterItem'] = useMemo((() =>\n selectedItemRef\n ? maybeSelectedRegisterItemData &&\n isRegisterItem(maybeSelectedRegisterItemData)\n ? {\n item: maybeSelectedRegisterItemData,\n ref: selectedItemRef,\n itemClass: itemClassConfiguration[selectedItemRef.classID],\n }\n : undefined\n : null\n ), [selectedItemRef, maybeSelectedRegisterItemData]);\n\n\n // Active CR\n\n const [ activeChangeRequestID, setActiveChangeRequestID ] = useState<string | null>(null);\n\n\n // TODO: Confirm that end extensions using RegistryKit can’t just import hooks\n // from RegistryKit and we really have to pass this to them via context\n // TODO: Why not use useObjectData directly? Since register item paths\n // are just object paths. The casting here is optimistic, since an item at given path\n // may not be a RegisterItem.\n const useRegisterItemData: RegisterItemDataHook = useCallback((opts) => {\n // Original item path mapped to its potential alternative path in current CR,\n // if the item is clarified or added in it.\n // TODO(perf): Access CR data and check whether the item is affected instead of blindly trying CR paths\n const pathsToRequest: Record<string, string> = {};\n\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\n\n for (const givenItemPath of opts.itemPaths) {\n pathsToRequest[givenItemPath] = givenItemPath;\n\n // Don’t use CR alternative path for any path that is already explicitly in-CR.\n // TODO(perf): move out of the loop what’s possible, use map-reduce maybe too\n if (!opts.ignoreActiveCR && !givenItemPath.startsWith('/proposals') && activeChangeRequest?.id) {\n pathsToRequest[itemPathInCR(givenItemPath, activeChangeRequest.id)] = givenItemPath;\n }\n }\n\n const result = useObjectData({\n objectPaths: Object.keys(pathsToRequest),\n //nounLabel: 'register item(s)',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData: Record<string, RegisterItem<any> | null> = {};\n for (const [alternativePath, itemPath] of Object.entries(pathsToRequest)) {\n const data = result.value.data[alternativePath]\n ?? result.value.data[itemPath]\n ?? null;\n if (isRegisterItem(data) || data === null) {\n itemData[itemPath] = data;\n }\n }\n\n // Convert dates\n // const parsedData: Record<string, RegisterItem<any> | null> = Object.entries(result.value.data).\n // map(([ path, data ]) => {\n // return {\n // [path]: data !== null\n // ? {\n // ...data,\n // dateAccepted: parseISO(data!.dateAccepted as unknown as string),\n // }\n // : null,\n // };\n // }).\n // reduce((p, c) => ({ ...p, ...c }), {});\n\n return {\n ...result,\n value: itemData,\n };\n }, [useObjectData, activeChangeRequestID]);\n\n\n // Register data\n\n const registerMetadataReq = useObjectData({\n objectPaths: [REGISTER_METADATA_FILENAME],\n nounLabel: 'register meta',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n const maybeRegisterMetadata =\n registerMetadataReq.value.data?.[REGISTER_METADATA_FILENAME] ??\n (registerMetadataReq.isUpdating ? undefined : null);\n const registerMetadata = !maybeRegisterMetadata || isRegisterMetadata(maybeRegisterMetadata)\n ? maybeRegisterMetadata\n : null;\n\n const remoteUsername: string | undefined = useRemoteUsername().value.username;\n\n const stakeholder: RegisterStakeholder | undefined = useMemo((() => remoteUsername\n ? (registerMetadata?.stakeholders ?? []).\n find(s => s.gitServerUsername === remoteUsername)\n : undefined\n ), [remoteUsername, registerMetadata]);\n\n const getRelatedItemClassConfiguration = useMemo(\n (() => _getRelatedClass(itemClassConfiguration)),\n [itemClassConfiguration]);\n\n const [activeChangeRequestIDDebounced] = useDebounce(activeChangeRequestID, 200);\n const customViewsMemoized = useMemo((() => customViews ?? []), [customViews]); \n\n return (\n <BrowserCtx.Provider\n value={useMemo((() => ({\n stakeholder,\n registerMetadata,\n offline: remoteUsername === undefined ? true : undefined,\n\n subregisters,\n itemClasses: itemClassConfiguration,\n\n jumpTo: spawnTab,\n\n selectedRegisterItem,\n\n activeChangeRequestID: activeChangeRequestIDDebounced,\n setActiveChangeRequestID,\n\n useRegisterItemData,\n getRelatedItemClassConfiguration,\n customViews: customViewsMemoized,\n\n keyExpression,\n defaultSearchCriteria,\n })), [\n selectedRegisterItem,\n activeChangeRequestIDDebounced,\n stakeholder,\n registerMetadata,\n remoteUsername,\n subregisters,\n spawnTab,\n useRegisterItemData,\n customViewsMemoized,\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n ])}>\n <ChangeRequestContextProvider changeRequestID={activeChangeRequestIDDebounced}>\n {children}\n </ChangeRequestContextProvider>\n </BrowserCtx.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useCallback, useState, useMemo } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport { jsx, css } from '@emotion/react';\n\nimport type { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport TabbedWorkspace, { type TabbedWorkspaceProps } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace';\nimport {\n makeContextProvider as makeTabbedWorkspaceContextProvider,\n TabbedWorkspaceContext,\n} from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\n\nimport {\n type RegisterItem,\n type RegisterItemDataHook,\n type RegisterStakeholder,\n type RegistryViewProps,\n type InternalItemReference,\n isRegisterItem,\n isRegisterMetadata,\n} from '../types';\n\nimport { REGISTER_METADATA_FILENAME } from '../common';\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\nimport { sidebarConfig, type SidebarID, sidebarIDs } from './sidebar';\nimport { BrowserCtx } from './BrowserCtx';\nimport { _getRelatedClass } from './util';\nimport RegisterHome from './detail/RegisterHome';\nimport protocolRegistry, { Protocols, type Protocol } from './protocolRegistry';\nimport {\n ChangeRequestContext,\n ChangeRequestContextProvider,\n} from './change-request/ChangeRequestContext';\nimport { useItemRef, itemPathInCR } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, SidebarID>(\n 'Browse',\n sidebarIDs,\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> =\nfunction RegistryView (props) {\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <RegistryWorkspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nconst SIDEBAR_WIDTH_SETTING_NAME = 'registryMainSidebarWidthPixels'\n\n\nconst RegistryWorkspace: React.FC<Record<never, never>> =\nfunction RegistryWorkspace () {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\n\n const globalMode: TabbedWorkspaceProps<any>['globalMode'] = useMemo(\n (() => activeChangeRequest\n ? {\n content: <>\n Viewing register as proposed — contents shown may differ from version in effect\n </>,\n intent: 'danger',\n onClick: () => spawnTab(`${Protocols.CHANGE_REQUEST}:/proposals/${activeChangeRequest.id}/main.yaml`),\n }\n : undefined),\n [activeChangeRequest?.id, spawnTab],\n );\n\n const { value: { settings } } = useSettings();\n const { value: { settings: globalSettings } } = useGlobalSettings();\n\n const stored = settings[SIDEBAR_WIDTH_SETTING_NAME];\n const sidebarWidth: number | undefined = stored && typeof stored === 'number'\n ? stored as number\n : undefined;\n\n return <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={sidebarConfig}\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={sidebarIDs}\n newTabPrompt={<RegisterHome />}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={useCallback((width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }, [updateSetting])}\n />\n};\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function BrowserCtxProvider ({\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n customViews,\n children,\n}) {\n\n const { useObjectData, useRemoteUsername } = useContext(DatasetContext);\n const { focusedTabURI, spawnTab } = useContext(TabbedWorkspaceContext);\n\n\n // Active item\n\n const selectedItemPath: string | null = useMemo((() =>\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.ITEM_DETAILS}:`)\n ? focusedTabURI.split(':')[1]\n : null\n ), [focusedTabURI]);\n\n const selectedItemRef: InternalItemReference | null = useItemRef(\n subregisters !== undefined,\n selectedItemPath);\n\n const maybeSelectedRegisterItemData: Record<string, any> | null = useObjectData({\n objectPaths: selectedItemPath ? [selectedItemPath] : [],\n }).value.data[selectedItemPath ?? ''];\n\n const selectedRegisterItem: BrowserCtx['selectedRegisterItem'] = useMemo((() =>\n selectedItemRef\n ? maybeSelectedRegisterItemData &&\n isRegisterItem(maybeSelectedRegisterItemData)\n ? {\n item: maybeSelectedRegisterItemData,\n ref: selectedItemRef,\n itemClass: itemClassConfiguration[selectedItemRef.classID],\n }\n : undefined\n : null\n ), [selectedItemRef, maybeSelectedRegisterItemData]);\n\n\n // Active CR\n\n const [ activeChangeRequestID, setActiveChangeRequestID ] = useState<string | null>(null);\n\n\n // TODO: Confirm that end extensions using RegistryKit can’t just import hooks\n // from RegistryKit and we really have to pass this to them via context\n // TODO: Why not use useObjectData directly? Since register item paths\n // are just object paths. The casting here is optimistic, since an item at given path\n // may not be a RegisterItem.\n const useRegisterItemData: RegisterItemDataHook = useCallback((opts) => {\n // Original item path mapped to its potential alternative path in current CR,\n // if the item is clarified or added in it.\n // TODO(perf): Access CR data and check whether the item is affected instead of blindly trying CR paths\n const pathsToRequest: Record<string, string> = {};\n\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\n\n for (const givenItemPath of opts.itemPaths) {\n pathsToRequest[givenItemPath] = givenItemPath;\n\n // Don’t use CR alternative path for any path that is already explicitly in-CR.\n // TODO(perf): move out of the loop what’s possible, use map-reduce maybe too\n if (!opts.ignoreActiveCR && !givenItemPath.startsWith('/proposals') && activeChangeRequest?.id) {\n pathsToRequest[itemPathInCR(givenItemPath, activeChangeRequest.id)] = givenItemPath;\n }\n }\n\n const result = useObjectData({\n objectPaths: Object.keys(pathsToRequest),\n //nounLabel: 'register item(s)',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData: Record<string, RegisterItem<any> | null> = {};\n for (const [alternativePath, itemPath] of Object.entries(pathsToRequest)) {\n const data = result.value.data[alternativePath]\n ?? result.value.data[itemPath]\n ?? null;\n if (isRegisterItem(data) || data === null) {\n itemData[itemPath] = data;\n }\n }\n\n // Convert dates\n // const parsedData: Record<string, RegisterItem<any> | null> = Object.entries(result.value.data).\n // map(([ path, data ]) => {\n // return {\n // [path]: data !== null\n // ? {\n // ...data,\n // dateAccepted: parseISO(data!.dateAccepted as unknown as string),\n // }\n // : null,\n // };\n // }).\n // reduce((p, c) => ({ ...p, ...c }), {});\n\n return {\n ...result,\n value: itemData,\n };\n }, [useObjectData, activeChangeRequestID]);\n\n\n // Register data\n\n const registerMetadataReq = useObjectData({\n objectPaths: [REGISTER_METADATA_FILENAME],\n nounLabel: 'register meta',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n const maybeRegisterMetadata =\n registerMetadataReq.value.data?.[REGISTER_METADATA_FILENAME] ??\n (registerMetadataReq.isUpdating ? undefined : null);\n const registerMetadata = !maybeRegisterMetadata || isRegisterMetadata(maybeRegisterMetadata)\n ? maybeRegisterMetadata\n : null;\n\n const remoteUsername: string | undefined = useRemoteUsername().value.username;\n\n const stakeholder: RegisterStakeholder | undefined = useMemo((() => remoteUsername\n ? (registerMetadata?.stakeholders ?? []).\n find(s => s.gitServerUsername === remoteUsername)\n : undefined\n ), [remoteUsername, registerMetadata]);\n\n const getRelatedItemClassConfiguration = useMemo(\n (() => _getRelatedClass(itemClassConfiguration)),\n [itemClassConfiguration]);\n\n const [activeChangeRequestIDDebounced] = useDebounce(activeChangeRequestID, 200);\n const customViewsMemoized = useMemo((() => customViews ?? []), [customViews]); \n\n return (\n <BrowserCtx.Provider\n value={useMemo((() => ({\n stakeholder,\n registerMetadata,\n offline: remoteUsername === undefined ? true : undefined,\n\n subregisters,\n itemClasses: itemClassConfiguration,\n\n jumpTo: spawnTab,\n\n selectedRegisterItem,\n\n activeChangeRequestID: activeChangeRequestIDDebounced,\n setActiveChangeRequestID,\n\n useRegisterItemData,\n getRelatedItemClassConfiguration,\n customViews: customViewsMemoized,\n\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n })), [\n selectedRegisterItem,\n activeChangeRequestIDDebounced,\n stakeholder,\n registerMetadata,\n remoteUsername,\n subregisters,\n spawnTab,\n useRegisterItemData,\n customViewsMemoized,\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n ])}>\n <ChangeRequestContextProvider changeRequestID={activeChangeRequestIDDebounced}>\n {children}\n </ChangeRequestContextProvider>\n </BrowserCtx.Provider>\n );\n}\n"]}
|
|
@@ -65,6 +65,7 @@ const Search = (0, _react.memo)(function ({
|
|
|
65
65
|
} = (0, _react.useContext)(_context2.TabbedWorkspaceContext);
|
|
66
66
|
const {
|
|
67
67
|
keyExpression,
|
|
68
|
+
getQuickSearchPredicate,
|
|
68
69
|
itemClasses,
|
|
69
70
|
subregisters,
|
|
70
71
|
selectedRegisterItem
|
|
@@ -108,9 +109,18 @@ const Search = (0, _react.memo)(function ({
|
|
|
108
109
|
var _a;
|
|
109
110
|
|
|
110
111
|
const quickSearchString = ((_a = state.quickSubstringQuery) !== null && _a !== void 0 ? _a : '').trim();
|
|
112
|
+
console.log("quick search predicate", getQuickSearchPredicate === null || getQuickSearchPredicate === void 0 ? void 0 : getQuickSearchPredicate(quickSearchString));
|
|
111
113
|
const withSearchString = state.query.criteria.criteria.length < 1 && quickSearchString !== '' ? {
|
|
112
114
|
require: 'all',
|
|
113
|
-
criteria: [{
|
|
115
|
+
criteria: [getQuickSearchPredicate ? {
|
|
116
|
+
key: 'custom',
|
|
117
|
+
query: _CRITERIA_CONFIGURATION.CUSTOM_CONDITION.toQuery({
|
|
118
|
+
customExpression: getQuickSearchPredicate(quickSearchString)
|
|
119
|
+
}, {
|
|
120
|
+
itemClasses,
|
|
121
|
+
subregisters
|
|
122
|
+
})
|
|
123
|
+
} : {
|
|
114
124
|
key: 'raw-substring',
|
|
115
125
|
query: _CRITERIA_CONFIGURATION.RAW_SUBSTRING.toQuery({
|
|
116
126
|
substring: quickSearchString
|
|
@@ -126,7 +136,7 @@ const Search = (0, _react.memo)(function ({
|
|
|
126
136
|
} : withSearchString;
|
|
127
137
|
return withImplicit.criteria.length > 0 ? (0, _criteriaGroupToQueryExpression.default)(withImplicit) // If no criteria provided, don’t show anything by default.
|
|
128
138
|
: 'false';
|
|
129
|
-
}, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters]);
|
|
139
|
+
}, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters, getQuickSearchPredicate]);
|
|
130
140
|
const stateRecalledDebounced = (0, _useDebounce.default)(stateRecalled, 100);
|
|
131
141
|
const queryExpressionDebounced = (0, _useDebounce.default)(effectiveQueryExpression, stateRecalledDebounced ? 500 : 0);
|
|
132
142
|
const datasetObjectSearchQueryExpression = (0, _react.useMemo)(() => queryExpressionDebounced != 'false' ? (0, _itemQueryUtils.getRegisterItemQuery)(queryExpressionDebounced, changeRequest !== null && changeRequest !== void 0 ? changeRequest : undefined) : 'return false', [queryExpressionDebounced, changeRequest]);
|
|
@@ -1 +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, { memo, useContext, useCallback, useMemo, 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 initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\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 stateName?: string\n\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ 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 [ 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\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n const effectiveQueryExpression = 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 {\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]);\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\n const handleOpenItem = useCallback(\n onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [onOpenItem, spawnTab]);\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: 5px;`}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\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"]}
|
|
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 { 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, CUSTOM_CONDITION } 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 initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\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 stateName?: string\n\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ implicitCriteria, availableClassIDs, stateName, onOpenItem, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { keyExpression, getQuickSearchPredicate, itemClasses, subregisters, selectedRegisterItem } = useContext(BrowserCtx);\n const { changeRequest } = useContext(ChangeRequestContext);\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\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n const effectiveQueryExpression = useMemo(() => {\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n console.log(\"quick search predicate\", getQuickSearchPredicate?.(quickSearchString));\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\n const handleOpenItem = useCallback(\n onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [onOpenItem, spawnTab]);\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: 5px;`}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\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"]}
|
package/views/util.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
/** @jsxFrag React.Fragment */
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import { HelmetProps } from 'react-helmet';
|
|
5
|
-
import { FormGroupProps } from '@blueprintjs/core';
|
|
4
|
+
import { type HelmetProps } from 'react-helmet';
|
|
5
|
+
import { type FormGroupProps, type ButtonProps, type TagProps } from '@blueprintjs/core';
|
|
6
|
+
import { type HelpTooltipProps } from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';
|
|
6
7
|
import type { ItemClassConfiguration, RelatedItemClassConfiguration } from '../types';
|
|
7
8
|
export { GenericRelatedItemView } from './GenericRelatedItemView';
|
|
8
9
|
/**
|
|
@@ -11,11 +12,14 @@ export { GenericRelatedItemView } from './GenericRelatedItemView';
|
|
|
11
12
|
*/
|
|
12
13
|
export declare function maybeEllipsizeString(str: string, maxLength?: number): string;
|
|
13
14
|
export declare const RegisterHelmet: React.FC<HelmetProps>;
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* A wrapper to show property data with its label(s).
|
|
17
|
+
*/
|
|
18
|
+
export declare const PropertyDetailView: React.FC<FormGroupProps & {
|
|
19
|
+
/** @deprecated use `label` instead */
|
|
20
|
+
title?: FormGroupProps["label"];
|
|
21
|
+
/** @deprecated use `labelInfo` instead */
|
|
16
22
|
secondaryTitle?: FormGroupProps["labelInfo"];
|
|
17
|
-
inline?: FormGroupProps["inline"];
|
|
18
|
-
className?: string;
|
|
19
23
|
}>;
|
|
20
24
|
/** Formats given date as a span with tooltip set to full ISO date & time. */
|
|
21
25
|
export declare const Datestamp: React.FC<{
|
|
@@ -35,3 +39,36 @@ export declare const TabContentsWithActions: React.FC<{
|
|
|
35
39
|
main: JSX.Element;
|
|
36
40
|
className?: string;
|
|
37
41
|
}>;
|
|
42
|
+
export declare type ClassificationEntry = TagProps & {
|
|
43
|
+
tooltip?: HelpTooltipProps;
|
|
44
|
+
};
|
|
45
|
+
export interface TabContentsWithHeaderProps {
|
|
46
|
+
title: JSX.Element | string;
|
|
47
|
+
smallTitle?: boolean;
|
|
48
|
+
classification?: ClassificationEntry[];
|
|
49
|
+
actions?: (ActionProps | ActionProps[])[];
|
|
50
|
+
tooltip?: HelpTooltipProps;
|
|
51
|
+
className?: string;
|
|
52
|
+
/**
|
|
53
|
+
* CSS to apply to child contents wrapper div.
|
|
54
|
+
*
|
|
55
|
+
* If 'card-grid', children would be expected to be cards
|
|
56
|
+
* (e.g., `FormGroupAsCardInGrid` or `CardInGrid`)
|
|
57
|
+
*
|
|
58
|
+
* 'card-grid' implies 'scrollable'.
|
|
59
|
+
*/
|
|
60
|
+
layout?: undefined | 'card-grid' | 'scrollable';
|
|
61
|
+
}
|
|
62
|
+
export declare const TabContentsWithHeader: React.FC<TabContentsWithHeaderProps>;
|
|
63
|
+
export declare type ActionProps = ButtonProps & ({
|
|
64
|
+
popup?: JSX.Element;
|
|
65
|
+
tooltip?: string;
|
|
66
|
+
});
|
|
67
|
+
export declare const CardInGrid: React.FC<{
|
|
68
|
+
description: string;
|
|
69
|
+
className?: string;
|
|
70
|
+
}>;
|
|
71
|
+
/** Useful in case of tab “card-grid” layout. */
|
|
72
|
+
export declare const FormGroupAsCardInGrid: React.FC<FormGroupProps & {
|
|
73
|
+
paddingPx?: number;
|
|
74
|
+
}>;
|