@riboseinc/paneron-registry-kit 2.2.20 → 2.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/types/proposal.d.ts +27 -7
- package/types/proposal.js +61 -4
- package/types/proposal.js.map +1 -1
- package/views/FilterCriteria/criteriaToNodes.js +5 -5
- package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
- package/views/FilterCriteria/mutateGroup.d.ts +9 -2
- package/views/FilterCriteria/mutateGroup.js +27 -5
- package/views/FilterCriteria/mutateGroup.js.map +1 -1
- package/views/ProposalHistoryDrawer.d.ts +12 -0
- package/views/ProposalHistoryDrawer.js +107 -0
- package/views/ProposalHistoryDrawer.js.map +1 -0
- package/views/SearchQuery.js +2 -2
- package/views/SearchQuery.js.map +1 -1
- package/views/change-request/Proposals.d.ts +3 -0
- package/views/change-request/Proposals.js +6 -5
- package/views/change-request/Proposals.js.map +1 -1
- package/views/detail/RegisterItem/index.js +16 -3
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/sidebar/Registration/index.d.ts +5 -0
- package/views/sidebar/Registration/index.js +7 -3
- package/views/sidebar/Registration/index.js.map +1 -1
- package/views/sidebar/Search/index.js +3 -3
- package/views/sidebar/Search/index.js.map +1 -1
- package/views/util.js +3 -1
- package/views/util.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riboseinc/paneron-registry-kit",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.22",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "Ribose Inc. <open.source@ribose.com>",
|
|
6
6
|
"scripts": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@blueprintjs/select": "~4.9.10",
|
|
29
29
|
"@emotion/react": "^11.10.6",
|
|
30
30
|
"@emotion/styled": "^11.10.6",
|
|
31
|
-
"@riboseinc/paneron-extension-kit": "2.2.
|
|
31
|
+
"@riboseinc/paneron-extension-kit": "2.2.15",
|
|
32
32
|
"@types/react": "17.0.53",
|
|
33
33
|
"@types/react-dom": "^17.0.2",
|
|
34
34
|
"@types/react-helmet": "^6.1.2",
|
package/types/proposal.d.ts
CHANGED
|
@@ -38,6 +38,11 @@ export interface ChangeRequest {
|
|
|
38
38
|
* (`controlBodyNotes` is in question.)
|
|
39
39
|
*/
|
|
40
40
|
export declare type DraftChangeRequest = Pick<ChangeRequest, 'proposals' | 'justification' | 'controlBodyNotes' | 'sponsor'>;
|
|
41
|
+
export declare const ChangeProposalType: {
|
|
42
|
+
readonly ADDITION: "addition";
|
|
43
|
+
readonly CLARIFICATION: "clarification";
|
|
44
|
+
readonly AMENDMENT: "amendment";
|
|
45
|
+
};
|
|
41
46
|
export declare const PROPOSAL_TYPES: readonly ["addition", "clarification", "amendment"];
|
|
42
47
|
interface BaseProposal {
|
|
43
48
|
disposition?: 'accepted' | 'notAccepted';
|
|
@@ -45,26 +50,41 @@ interface BaseProposal {
|
|
|
45
50
|
sources?: Citation[];
|
|
46
51
|
}
|
|
47
52
|
export interface Addition extends BaseProposal {
|
|
48
|
-
type:
|
|
53
|
+
type: typeof ChangeProposalType.ADDITION;
|
|
49
54
|
}
|
|
50
55
|
export interface Clarification extends BaseProposal {
|
|
51
|
-
type:
|
|
56
|
+
type: typeof ChangeProposalType.CLARIFICATION;
|
|
52
57
|
}
|
|
58
|
+
export declare const AmendmentType: {
|
|
59
|
+
readonly SUPERSESSION: "supersession";
|
|
60
|
+
readonly RETIREMENT: "retirement";
|
|
61
|
+
readonly INVALIDATION: "invalidation";
|
|
62
|
+
};
|
|
63
|
+
export declare type AmendmentTypeType = typeof AmendmentType[keyof typeof AmendmentType];
|
|
53
64
|
export declare const AMENDMENT_TYPES: readonly ["supersession", "retirement", "invalidation"];
|
|
54
65
|
interface BaseAmendment extends BaseProposal {
|
|
55
|
-
type:
|
|
56
|
-
amendmentType:
|
|
66
|
+
type: typeof ChangeProposalType.AMENDMENT;
|
|
67
|
+
amendmentType: AmendmentTypeType;
|
|
57
68
|
}
|
|
58
69
|
export interface Retirement extends BaseAmendment {
|
|
59
|
-
amendmentType:
|
|
70
|
+
amendmentType: typeof AmendmentType.RETIREMENT;
|
|
60
71
|
}
|
|
61
72
|
export interface Supersession extends BaseAmendment {
|
|
62
|
-
amendmentType:
|
|
73
|
+
amendmentType: typeof AmendmentType.SUPERSESSION;
|
|
63
74
|
supersedingItemIDs: string[];
|
|
64
75
|
}
|
|
65
76
|
export interface Invalidation extends BaseAmendment {
|
|
66
|
-
amendmentType:
|
|
77
|
+
amendmentType: typeof AmendmentType.INVALIDATION;
|
|
67
78
|
}
|
|
68
79
|
export declare type Amendment = Supersession | Retirement | Invalidation;
|
|
69
80
|
export declare type ChangeProposal = Amendment | Clarification | Addition;
|
|
81
|
+
export declare function isBaseProposal(val: any): val is BaseProposal;
|
|
82
|
+
export declare function isProposal(val: any): val is ChangeProposal;
|
|
83
|
+
export declare function isAddition(val: BaseProposal): val is Addition;
|
|
84
|
+
export declare function isClarification(val: BaseProposal): val is Clarification;
|
|
85
|
+
export declare function isBaseAmendment(val: BaseProposal): val is BaseAmendment;
|
|
86
|
+
export declare function isAmendment(val: any): val is Amendment;
|
|
87
|
+
export declare function isRetirement(val: BaseAmendment): val is Retirement;
|
|
88
|
+
export declare function isSupersession(val: BaseAmendment): val is Supersession;
|
|
89
|
+
export declare function isInvalidation(val: BaseAmendment): val is Invalidation;
|
|
70
90
|
export {};
|
package/types/proposal.js
CHANGED
|
@@ -3,12 +3,69 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.isBaseProposal = isBaseProposal;
|
|
7
|
+
exports.isProposal = isProposal;
|
|
8
|
+
exports.isAddition = isAddition;
|
|
9
|
+
exports.isClarification = isClarification;
|
|
10
|
+
exports.isBaseAmendment = isBaseAmendment;
|
|
11
|
+
exports.isAmendment = isAmendment;
|
|
12
|
+
exports.isRetirement = isRetirement;
|
|
13
|
+
exports.isSupersession = isSupersession;
|
|
14
|
+
exports.isInvalidation = isInvalidation;
|
|
15
|
+
exports.AMENDMENT_TYPES = exports.AmendmentType = exports.PROPOSAL_TYPES = exports.ChangeProposalType = exports.DISPOSITION_OPTIONS = exports.DECISION_STATUSES = void 0;
|
|
7
16
|
const DECISION_STATUSES = ['pending', 'tentative', 'final'];
|
|
8
17
|
exports.DECISION_STATUSES = DECISION_STATUSES;
|
|
9
18
|
const DISPOSITION_OPTIONS = ['withdrawn', 'accepted', 'notAccepted'];
|
|
10
19
|
exports.DISPOSITION_OPTIONS = DISPOSITION_OPTIONS;
|
|
11
|
-
const
|
|
20
|
+
const ChangeProposalType = {
|
|
21
|
+
ADDITION: 'addition',
|
|
22
|
+
CLARIFICATION: 'clarification',
|
|
23
|
+
AMENDMENT: 'amendment'
|
|
24
|
+
};
|
|
25
|
+
exports.ChangeProposalType = ChangeProposalType;
|
|
26
|
+
const PROPOSAL_TYPES = [ChangeProposalType.ADDITION, ChangeProposalType.CLARIFICATION, ChangeProposalType.AMENDMENT];
|
|
12
27
|
exports.PROPOSAL_TYPES = PROPOSAL_TYPES;
|
|
13
|
-
const
|
|
14
|
-
|
|
28
|
+
const AmendmentType = {
|
|
29
|
+
SUPERSESSION: 'supersession',
|
|
30
|
+
RETIREMENT: 'retirement',
|
|
31
|
+
INVALIDATION: 'invalidation'
|
|
32
|
+
};
|
|
33
|
+
exports.AmendmentType = AmendmentType;
|
|
34
|
+
const AMENDMENT_TYPES = [AmendmentType.SUPERSESSION, AmendmentType.RETIREMENT, AmendmentType.INVALIDATION];
|
|
35
|
+
exports.AMENDMENT_TYPES = AMENDMENT_TYPES;
|
|
36
|
+
|
|
37
|
+
function isBaseProposal(val) {
|
|
38
|
+
return PROPOSAL_TYPES.indexOf(val === null || val === void 0 ? void 0 : val.type) >= 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function isProposal(val) {
|
|
42
|
+
return isBaseProposal(val) && (isAddition(val) || isClarification(val) || isAmendment(val));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function isAddition(val) {
|
|
46
|
+
return val.type === ChangeProposalType.ADDITION;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function isClarification(val) {
|
|
50
|
+
return val.type === ChangeProposalType.CLARIFICATION;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function isBaseAmendment(val) {
|
|
54
|
+
return val.type === ChangeProposalType.AMENDMENT && AMENDMENT_TYPES.indexOf(val.amendmentType) >= 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function isAmendment(val) {
|
|
58
|
+
return isBaseAmendment(val) && (isRetirement(val) || isSupersession(val) || isInvalidation(val));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function isRetirement(val) {
|
|
62
|
+
return val.amendmentType === AmendmentType.RETIREMENT;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function isSupersession(val) {
|
|
66
|
+
return val.amendmentType === AmendmentType.SUPERSESSION;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function isInvalidation(val) {
|
|
70
|
+
return val.amendmentType === AmendmentType.INVALIDATION;
|
|
71
|
+
}
|
package/types/proposal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/types/proposal.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS;IACT,WAAW;IACX,OAAO;CACC,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW;IACX,UAAU;IACV,aAAa;CACL,CAAC;AAiDX,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../src/types/proposal.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS;IACT,WAAW;IACX,OAAO;CACC,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,WAAW;IACX,UAAU;IACV,aAAa;CACL,CAAC;AAiDX,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE,WAAW;CACd,CAAC;AACX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,kBAAkB,CAAC,QAAQ;IAC3B,kBAAkB,CAAC,aAAa;IAChC,kBAAkB,CAAC,SAAS;CACpB,CAAC;AAqBX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,cAAc;CACpB,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,CAAC,YAAY;IAC1B,aAAa,CAAC,UAAU;IACxB,aAAa,CAAC,YAAY;CAClB,CAAC;AAoBX,MAAM,UAAU,cAAc,CAAC,GAAQ;IACrC,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,GAAQ;IACjC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAC7B,UAAU,CAAC,GAAG,CAAC;WACZ,eAAe,CAAC,GAAG,CAAC;WACpB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,GAAiB;IAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,aAAa,CAAC,CAAC;AACzD,CAAC;AACD,MAAM,UAAU,eAAe,CAAC,GAAiB;IAC/C,OAAO,CACL,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,SAAS;WACtC,eAAe,CAAC,OAAO,CAAE,GAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAC9B,YAAY,CAAC,GAAG,CAAC;WACd,cAAc,CAAC,GAAG,CAAC;WACnB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,OAAO,GAAG,CAAC,aAAa,KAAK,aAAa,CAAC,UAAU,CAAC;AACxD,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,OAAO,GAAG,CAAC,aAAa,KAAK,aAAa,CAAC,YAAY,CAAC;AAC1D,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,OAAO,GAAG,CAAC,aAAa,KAAK,aAAa,CAAC,YAAY,CAAC;AAC1D,CAAC","sourcesContent":["import type { RegisterStakeholder } from './stakeholder';\nimport type { Citation } from './util';\n\n\nexport const DECISION_STATUSES = [\n 'pending',\n 'tentative',\n 'final',\n] as const;\n\nexport const DISPOSITION_OPTIONS = [\n 'withdrawn',\n 'accepted',\n 'notAccepted',\n] as const;\n\n/**\n * Item paths in proposal set must start with a slash\n * and will be treated relative to dataset root.\n * Object paths should conform to registry item path shape\n * of `/<classID>/<itemID>.yaml`.\n * (the `[/subregisterID]/<classID>/<itemID>.yaml` is acceptable\n * but deprecated, as subregisters are deprecated).\n */\nexport type ProposalSet = {\n [objectPath: string]: ChangeProposal\n}\n\n/**\n * A change request, per ISO 19135-1 model.\n *\n * @deprecated use cr.Base (or a more specific type) instead\n */\nexport interface ChangeRequest {\n // Supplied by sponsor\n /** Justification for the change */\n justification: string\n\n proposals: ProposalSet\n\n // Enforced by the system\n id: string\n timeStarted: Date\n timeProposed?: Date\n timeDisposed?: Date\n sponsor: RegisterStakeholder\n\n // Supplied by register manager\n status: typeof DECISION_STATUSES[number] // Default filled in by the system but changeable\n disposition?: typeof DISPOSITION_OPTIONS[number]\n controlBodyDecisionEvent?: string\n controlBodyNotes?: string\n registerManagerNotes?: string\n}\n\n\n/**\n * Change request properties for the purposes of drafting.\n * (`controlBodyNotes` is in question.)\n */\nexport type DraftChangeRequest =\n Pick<ChangeRequest, 'proposals' | 'justification' | 'controlBodyNotes' | 'sponsor'>;\n\nexport const ChangeProposalType = {\n ADDITION: 'addition',\n CLARIFICATION: 'clarification',\n AMENDMENT: 'amendment',\n} as const;\nexport const PROPOSAL_TYPES = [\n ChangeProposalType.ADDITION,\n ChangeProposalType.CLARIFICATION,\n ChangeProposalType.AMENDMENT,\n] as const;\n\ninterface BaseProposal {\n //itemID: RegisterItemID\n disposition?: 'accepted' | 'notAccepted'\n type: typeof PROPOSAL_TYPES[number]\n sources?: Citation[]\n}\n\nexport interface Addition extends BaseProposal {\n type: typeof ChangeProposalType.ADDITION\n ///** New item data. */\n //payload: Payload\n}\n\nexport interface Clarification extends BaseProposal {\n type: typeof ChangeProposalType.CLARIFICATION\n ///** Updated item data */\n //payload: Payload\n}\n\nexport const AmendmentType = {\n SUPERSESSION: 'supersession',\n RETIREMENT: 'retirement',\n INVALIDATION: 'invalidation',\n} as const;\nexport type AmendmentTypeType = typeof AmendmentType[keyof typeof AmendmentType];\nexport const AMENDMENT_TYPES = [\n AmendmentType.SUPERSESSION,\n AmendmentType.RETIREMENT,\n AmendmentType.INVALIDATION,\n] as const;\n\ninterface BaseAmendment extends BaseProposal {\n type: typeof ChangeProposalType.AMENDMENT\n amendmentType: AmendmentTypeType\n}\nexport interface Retirement extends BaseAmendment {\n amendmentType: typeof AmendmentType.RETIREMENT\n}\nexport interface Supersession extends BaseAmendment {\n amendmentType: typeof AmendmentType.SUPERSESSION\n supersedingItemIDs: string[]\n}\nexport interface Invalidation extends BaseAmendment {\n amendmentType: typeof AmendmentType.INVALIDATION\n}\nexport type Amendment = Supersession | Retirement | Invalidation\n\nexport type ChangeProposal = Amendment | Clarification | Addition\n\nexport function isBaseProposal(val: any): val is BaseProposal {\n return PROPOSAL_TYPES.indexOf(val?.type) >= 0;\n}\nexport function isProposal(val: any): val is ChangeProposal {\n return (isBaseProposal(val) && (\n isAddition(val)\n || isClarification(val)\n || isAmendment(val)));\n}\nexport function isAddition(val: BaseProposal): val is Addition {\n return (val.type === ChangeProposalType.ADDITION);\n}\nexport function isClarification(val: BaseProposal): val is Clarification {\n return (val.type === ChangeProposalType.CLARIFICATION);\n}\nexport function isBaseAmendment(val: BaseProposal): val is BaseAmendment {\n return (\n val.type === ChangeProposalType.AMENDMENT\n && AMENDMENT_TYPES.indexOf((val as Amendment).amendmentType) >= 0);\n}\nexport function isAmendment(val: any): val is Amendment {\n return (isBaseAmendment(val) && (\n isRetirement(val)\n || isSupersession(val)\n || isInvalidation(val)));\n}\nexport function isRetirement(val: BaseAmendment): val is Retirement {\n return val.amendmentType === AmendmentType.RETIREMENT;\n}\nexport function isSupersession(val: BaseAmendment): val is Supersession {\n return val.amendmentType === AmendmentType.SUPERSESSION;\n}\nexport function isInvalidation(val: BaseAmendment): val is Invalidation {\n return val.amendmentType === AmendmentType.INVALIDATION;\n}\n"]}
|
|
@@ -37,12 +37,12 @@ function criteriaToNodes(cs, opts) {
|
|
|
37
37
|
const isRoot = path.length < 1;
|
|
38
38
|
const defaultIcon = isRoot && opts.implied === true ? 'manual' : undefined;
|
|
39
39
|
const disabled = opts.implied === true;
|
|
40
|
-
const deleteButton =
|
|
40
|
+
const deleteButton = opts.onDeleteItem ? (0, _react.jsx)(_core.Button, {
|
|
41
41
|
minimal: true,
|
|
42
42
|
small: true,
|
|
43
43
|
onClick: () => opts.onDeleteItem(path, idx),
|
|
44
44
|
title: "Delete this criterion or criteria block",
|
|
45
|
-
disabled:
|
|
45
|
+
disabled: opts.implied,
|
|
46
46
|
icon: "cross"
|
|
47
47
|
}) : null;
|
|
48
48
|
const addGroupButton = opts.onAddGroup ? (0, _react.jsx)(_core.Button, {
|
|
@@ -63,7 +63,7 @@ function criteriaToNodes(cs, opts) {
|
|
|
63
63
|
isExpanded: true,
|
|
64
64
|
icon: defaultIcon,
|
|
65
65
|
label: (0, _react.jsx)(_index.CriteriaGroupLabel, {
|
|
66
|
-
css: (0, _react.css)`margin: 2.5px
|
|
66
|
+
css: (0, _react.css)`margin: 2.5px`,
|
|
67
67
|
criteriaGroup: cg,
|
|
68
68
|
onUpdate: opts.onEditItem ? op => opts.onEditItem(path, idx, { ...cg,
|
|
69
69
|
require: op
|
|
@@ -124,7 +124,7 @@ function criteriaToNodes(cs, opts) {
|
|
|
124
124
|
}, true)
|
|
125
125
|
}, "criteria") : (0, _react.jsx)(_core.ControlGroup, {
|
|
126
126
|
vertical: true,
|
|
127
|
-
css: (0, _react.css)`margin
|
|
127
|
+
css: (0, _react.css)`margin: 2.5px 0;`
|
|
128
128
|
}, (0, _react.jsx)(_PropertyView.Select, {
|
|
129
129
|
options: criterionTypeOptions,
|
|
130
130
|
value: ci.key,
|
|
@@ -154,7 +154,7 @@ function criteriaToNodes(cs, opts) {
|
|
|
154
154
|
id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,
|
|
155
155
|
disabled,
|
|
156
156
|
label,
|
|
157
|
-
secondaryLabel: (0, _react.jsx)(_core.ButtonGroup, null, deleteButton)
|
|
157
|
+
secondaryLabel: !isPlaceholder ? (0, _react.jsx)(_core.ButtonGroup, null, deleteButton) : undefined
|
|
158
158
|
};
|
|
159
159
|
}
|
|
160
160
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteriaToNodes.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaToNodes.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx, css } from '@emotion/react';\nimport React from 'react';\nimport { Button, ButtonGroup, OptionProps, TreeNodeInfo, ControlGroup } from '@blueprintjs/core';\nimport { Select } from '@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView';\nimport { ItemClassConfigurationSet, Subregisters } from '../../types';\nimport { CriteriaGroup, Criterion, isCriteriaGroup, isCriteriaKey } from './models';\nimport { CriteriaGroupLabel } from './index';\nimport { CRITERIA_CONFIGURATION } from './CRITERIA_CONFIGURATION';\n\n\n/**\n * Builds Blueprint’s tree nodes given criteria,\n * callbacks and relevant register configuration.\n */\nexport default function criteriaToNodes(\n cs: (CriteriaGroup | Criterion)[],\n opts: {\n path?: number[];\n\n /** XXX: This seems to be obsolete. Don’t use, investigate for usefulness. */\n implied?: true;\n\n /**\n * Called when criteria is being edited. `commit` is set to true\n * when change should take effect.\n */\n onEditItem?: (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) => void;\n onDeleteItem?: (parent: number[], idx: number) => void;\n onAddGroup?: (parent: number[]) => void;\n\n itemClasses: ItemClassConfigurationSet;\n availableClassIDs: string[];\n subregisters?: Subregisters;\n }): TreeNodeInfo[] {\n const path = opts.path ?? [];\n\n return [...cs.entries()].map(([idx, c]): TreeNodeInfo => {\n const isRoot = path.length < 1;\n const defaultIcon = isRoot && opts.implied === true\n ? 'manual'\n : undefined;\n\n const disabled = opts.implied === true;\n const deleteButton: JSX.Element | null =\n idx < (cs.length - 1) && opts.onDeleteItem\n ? <Button minimal small\n onClick={() => opts.onDeleteItem!(path, idx)}\n title=\"Delete this criterion or criteria block\"\n disabled={isRoot}\n icon=\"cross\" />\n : null;\n const addGroupButton: JSX.Element | null = opts.onAddGroup\n ? <Button\n minimal\n small\n title=\"Add nested criteria block\"\n icon=\"add-to-artifact\"\n onClick={() => opts.onAddGroup!([...path, idx])} />\n : null;\n\n if (isCriteriaGroup(c)) {\n\n // Render criteria group recursively\n\n const cg = c as CriteriaGroup;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied}`,\n disabled,\n hasCaret: true,\n isExpanded: true,\n icon: defaultIcon,\n label: <CriteriaGroupLabel\n css={css`margin: 2.5px 0`}\n criteriaGroup={cg}\n onUpdate={opts.onEditItem\n ? ((op) => opts.onEditItem!(path, idx, { ...cg, require: op }, true))\n : undefined} />,\n secondaryLabel: <ButtonGroup>\n {opts.implied && isRoot ? <>(implied)</> : null}\n {addGroupButton}\n {deleteButton}\n </ButtonGroup>,\n childNodes: criteriaToNodes(\n opts.onEditItem\n ? [...cg.criteria, { key: 'custom', query: '' }]\n : cg.criteria,\n { ...opts, path: [...path, idx] }),\n };\n\n } else {\n\n // Render leaf criterion\n\n const ci = c as Criterion;\n const { subregisters, itemClasses } = opts;\n if (!isCriteriaKey(ci.key)) {\n console.error(\"Invalid criteria key encountered\", ci.key);\n throw new Error(\"Invalid criteria key encountered\");\n }\n const cfg = CRITERIA_CONFIGURATION[ci.key];\n if (!cfg) {\n console.error(\"Missing criterion configuration for key\", ci.key);\n throw new Error(\"Missing criterion configuration\");\n }\n const Widget = cfg.widget;\n const data = cfg.fromQuery(ci.query, { subregisters, itemClasses });\n const criterionTypeOptions: OptionProps[] = Object.entries(CRITERIA_CONFIGURATION).\n map(([key, cfg]) => {\n return { value: key, label: cfg.label };\n });\n const isPlaceholder = ci.key === 'custom' && ci.query === '';\n const label = isPlaceholder\n ? <Button\n small\n minimal\n icon=\"plus\"\n onClick={() => opts.onEditItem!(\n path,\n idx,\n { key: 'custom', query: cfg.toQuery({ customExpression: 'false' }, { subregisters, itemClasses }) },\n true)}>\n criteria\n </Button>\n : <ControlGroup vertical css={css`margin-bottom: 2.5px;`}>\n <Select\n options={criterionTypeOptions}\n value={ci.key}\n disabled={!opts.onEditItem}\n onChange={opts.onEditItem\n ? (evt) => {\n if (evt.currentTarget.value !== '' && isCriteriaKey(evt.currentTarget.value)) {\n opts.onEditItem!(\n path,\n idx,\n { key: evt.currentTarget.value, query: '' }\n );\n }\n }\n : undefined} />\n <Widget\n itemClasses={opts.itemClasses}\n availableClassIDs={opts.availableClassIDs}\n subregisters={opts.subregisters}\n data={data}\n onChange={(val) => opts.onEditItem!(\n path,\n idx,\n { key: ci.key, query: cfg.toQuery(val, { subregisters, itemClasses }) },\n true)} />\n </ControlGroup>;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,\n disabled,\n label,\n secondaryLabel: <ButtonGroup>\n {deleteButton}\n </ButtonGroup>,\n };\n\n }\n\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"criteriaToNodes.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/criteriaToNodes.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx, css } from '@emotion/react';\nimport React from 'react';\nimport { Button, ButtonGroup, OptionProps, TreeNodeInfo, ControlGroup } from '@blueprintjs/core';\nimport { Select } from '@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView';\nimport { ItemClassConfigurationSet, Subregisters } from '../../types';\nimport { CriteriaGroup, Criterion, isCriteriaGroup, isCriteriaKey } from './models';\nimport { CriteriaGroupLabel } from './index';\nimport { CRITERIA_CONFIGURATION } from './CRITERIA_CONFIGURATION';\n\n\n/**\n * Builds Blueprint’s tree nodes given criteria,\n * callbacks and relevant register configuration.\n */\nexport default function criteriaToNodes(\n cs: (CriteriaGroup | Criterion)[],\n opts: {\n path?: number[];\n\n /** XXX: This seems to be obsolete. Don’t use, investigate for usefulness. */\n implied?: true;\n\n /**\n * Called when criteria is being edited. `commit` is set to true\n * when change should take effect.\n */\n onEditItem?: (parent: number[], idx: number, newItem: CriteriaGroup | Criterion, commit?: true) => void;\n onDeleteItem?: (parent: number[], idx: number) => void;\n onAddGroup?: (parent: number[]) => void;\n\n itemClasses: ItemClassConfigurationSet;\n availableClassIDs: string[];\n subregisters?: Subregisters;\n }): TreeNodeInfo[] {\n const path = opts.path ?? [];\n\n return [...cs.entries()].map(([idx, c]): TreeNodeInfo => {\n const isRoot = path.length < 1;\n const defaultIcon = isRoot && opts.implied === true\n ? 'manual'\n : undefined;\n\n const disabled = opts.implied === true;\n const deleteButton: JSX.Element | null =\n opts.onDeleteItem\n ? <Button\n minimal\n small\n onClick={() => opts.onDeleteItem!(path, idx)}\n title=\"Delete this criterion or criteria block\"\n disabled={opts.implied}\n icon=\"cross\"\n />\n : null;\n const addGroupButton: JSX.Element | null = opts.onAddGroup\n ? <Button\n minimal\n small\n title=\"Add nested criteria block\"\n icon=\"add-to-artifact\"\n onClick={() => opts.onAddGroup!([...path, idx])}\n />\n : null;\n\n if (isCriteriaGroup(c)) {\n\n // Render criteria group recursively\n\n const cg = c as CriteriaGroup;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied}`,\n disabled,\n hasCaret: true,\n isExpanded: true,\n icon: defaultIcon,\n label:\n <CriteriaGroupLabel\n css={css`margin: 2.5px`}\n criteriaGroup={cg}\n onUpdate={opts.onEditItem\n ? ((op) => opts.onEditItem!(path, idx, { ...cg, require: op }, true))\n : undefined}\n />,\n secondaryLabel:\n <ButtonGroup>\n {opts.implied && isRoot ? <>(implied)</> : null}\n {addGroupButton}\n {deleteButton}\n </ButtonGroup>,\n childNodes: criteriaToNodes(\n opts.onEditItem\n ? [...cg.criteria, { key: 'custom', query: '' }]\n : cg.criteria,\n { ...opts, path: [...path, idx] }),\n };\n\n } else {\n\n // Render leaf criterion\n\n const ci = c as Criterion;\n const { subregisters, itemClasses } = opts;\n if (!isCriteriaKey(ci.key)) {\n console.error(\"Invalid criteria key encountered\", ci.key);\n throw new Error(\"Invalid criteria key encountered\");\n }\n const cfg = CRITERIA_CONFIGURATION[ci.key];\n if (!cfg) {\n console.error(\"Missing criterion configuration for key\", ci.key);\n throw new Error(\"Missing criterion configuration\");\n }\n const Widget = cfg.widget;\n const data = cfg.fromQuery(ci.query, { subregisters, itemClasses });\n const criterionTypeOptions: OptionProps[] = Object.entries(CRITERIA_CONFIGURATION).\n map(([key, cfg]) => {\n return { value: key, label: cfg.label };\n });\n const isPlaceholder = ci.key === 'custom' && ci.query === '';\n const label = isPlaceholder\n ? <Button\n small\n minimal\n icon=\"plus\"\n onClick={() => opts.onEditItem!(\n path,\n idx,\n { key: 'custom', query: cfg.toQuery({ customExpression: 'false' }, { subregisters, itemClasses }) },\n true)}>\n criteria\n </Button>\n : <ControlGroup vertical css={css`margin: 2.5px 0;`}>\n <Select\n options={criterionTypeOptions}\n value={ci.key}\n disabled={!opts.onEditItem}\n onChange={opts.onEditItem\n ? (evt) => {\n if (evt.currentTarget.value !== '' && isCriteriaKey(evt.currentTarget.value)) {\n opts.onEditItem!(\n path,\n idx,\n { key: evt.currentTarget.value, query: '' }\n );\n }\n }\n : undefined}\n />\n <Widget\n itemClasses={opts.itemClasses}\n availableClassIDs={opts.availableClassIDs}\n subregisters={opts.subregisters}\n data={data}\n onChange={(val) => opts.onEditItem!(\n path,\n idx,\n { key: ci.key, query: cfg.toQuery(val, { subregisters, itemClasses }) },\n true)}\n />\n </ControlGroup>;\n return {\n id: `${path.join('-')}-${idx}-${opts.implied ? 'implied' : ''}`,\n disabled,\n label,\n secondaryLabel: !isPlaceholder\n ? <ButtonGroup>\n {deleteButton}\n </ButtonGroup>\n : undefined,\n };\n\n }\n\n });\n}\n"]}
|
|
@@ -10,8 +10,15 @@ declare type TreeMutation<T> = {
|
|
|
10
10
|
idx: number;
|
|
11
11
|
item: T;
|
|
12
12
|
};
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Mutates given criteria tree in place.
|
|
15
|
+
* If `path` is empty, guarantees to return a list with at least one item.
|
|
16
|
+
* (There’s only one top-level element.)
|
|
17
|
+
*/
|
|
14
18
|
export default function mutateGroup(criteria: (CriteriaGroup | Criterion)[],
|
|
15
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Parent node path in reverse (top-level index coming last).
|
|
21
|
+
* Empty path would indicate top-level (which is single and cannot be deleted).
|
|
22
|
+
*/
|
|
16
23
|
path: number[], mutation: TreeMutation<CriteriaGroup | Criterion>): void;
|
|
17
24
|
export {};
|
|
@@ -5,13 +5,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = mutateGroup;
|
|
7
7
|
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Mutates given criteria tree in place.
|
|
10
|
+
* If `path` is empty, guarantees to return a list with at least one item.
|
|
11
|
+
* (There’s only one top-level element.)
|
|
12
|
+
*/
|
|
9
13
|
function mutateGroup(criteria,
|
|
10
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Parent node path in reverse (top-level index coming last).
|
|
16
|
+
* Empty path would indicate top-level (which is single and cannot be deleted).
|
|
17
|
+
*/
|
|
11
18
|
path, mutation) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
var _a;
|
|
20
|
+
|
|
21
|
+
if (path.length < 1) {
|
|
22
|
+
if (!((_a = criteria[0]) === null || _a === void 0 ? void 0 : _a.hasOwnProperty('criteria'))) {
|
|
23
|
+
throw new Error("Top-level item is not a group");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (mutation.action === 'edit') {
|
|
27
|
+
// Adjust root criteria group requirement (any/all/none)
|
|
28
|
+
criteria[0].require = mutation.item.require;
|
|
29
|
+
} else if (mutation.action === 'delete') {
|
|
30
|
+
// We MUST NOT delete the singular root critera.
|
|
31
|
+
// (Calling code depends on there being exactly one top-level group.)
|
|
32
|
+
// However, we can delete all nested criteria.
|
|
33
|
+
criteria[0].criteria.splice(0);
|
|
34
|
+
}
|
|
35
|
+
} // Other adjustments
|
|
36
|
+
|
|
15
37
|
|
|
16
38
|
for (const [curIdx, c] of criteria.entries()) {
|
|
17
39
|
if (curIdx === path[path.length - 1]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutateGroup.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/mutateGroup.ts"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"mutateGroup.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/mutateGroup.ts"],"names":[],"mappings":"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","sourcesContent":["import { CriteriaGroup, Criterion } from './models';\n\n\ntype TreeMutation<T> =\n { action: 'delete'; idx: number; } |\n { action: 'insert'; item: T; } |\n { action: 'edit'; idx: number; item: T; };\n\n\n/**\n * Mutates given criteria tree in place.\n * If `path` is empty, guarantees to return a list with at least one item.\n * (There’s only one top-level element.)\n */\nexport default function mutateGroup(\n criteria: (CriteriaGroup | Criterion)[],\n\n /**\n * Parent node path in reverse (top-level index coming last).\n * Empty path would indicate top-level (which is single and cannot be deleted).\n */\n path: number[],\n\n mutation: TreeMutation<CriteriaGroup | Criterion>,\n) {\n\n if (path.length < 1) {\n if (!criteria[0]?.hasOwnProperty('criteria')) {\n throw new Error(\"Top-level item is not a group\");\n }\n\n if (mutation.action === 'edit') {\n // Adjust root criteria group requirement (any/all/none)\n (criteria[0] as CriteriaGroup).require = (mutation.item as CriteriaGroup).require;\n } else if (mutation.action === 'delete') {\n // We MUST NOT delete the singular root critera.\n // (Calling code depends on there being exactly one top-level group.)\n // However, we can delete all nested criteria.\n (criteria[0] as CriteriaGroup).criteria.splice(0);\n }\n }\n\n // Other adjustments\n for (const [curIdx, c] of criteria.entries()) {\n if (curIdx === path[path.length - 1]) {\n path.pop();\n\n let cg: CriteriaGroup;\n if (c.hasOwnProperty('criteria')) {\n // This item is a group, let’s go in and delete descendants\n cg = c as CriteriaGroup;\n } else {\n // This item is a predicate string, can’t go in and delete descendants\n throw new Error(`Cannot enter item: not a group at path ${path.join('/')}/${curIdx}: ${c}`);\n }\n\n if (path.length > 0) {\n mutateGroup(cg.criteria, path, mutation);\n } else {\n if (mutation.action === 'delete') {\n cg.criteria.splice(mutation.idx, 1);\n } else if (mutation.action === 'insert') {\n cg.criteria.push(mutation.item);\n } else if (mutation.action === 'edit') {\n if (cg.criteria[mutation.idx] === undefined && mutation.idx === cg.criteria.length) {\n if (mutation.item.hasOwnProperty('require')) {\n console.error(cg.criteria, mutation);\n throw new Error(\"Won’t auto-insert new group\");\n }\n // It may be that a new item is being appended\n cg.criteria.push(mutation.item);\n }\n const isGroup = cg.criteria[mutation.idx].hasOwnProperty('require');\n if (isGroup) {\n // If it’s a group, only change the predicate operator to preserve nested items:\n (cg.criteria[mutation.idx] as CriteriaGroup).require =\n (mutation.item as CriteriaGroup).require;\n } else {\n cg.criteria[mutation.idx] = mutation.item;\n }\n }\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
/** @jsxFrag React.Fragment */
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import type { InternalItemReference } from '../types';
|
|
5
|
+
/** History of changes affecting given item. */
|
|
6
|
+
declare const ProposalHistoryDrawer: React.FC<{
|
|
7
|
+
itemPath: string;
|
|
8
|
+
isOpen: boolean;
|
|
9
|
+
onClose: () => void;
|
|
10
|
+
onChooseItem?: (itemRef: InternalItemReference) => void;
|
|
11
|
+
}>;
|
|
12
|
+
export default ProposalHistoryDrawer;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
|
+
|
|
10
|
+
var _react2 = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _core = require("@blueprintjs/core");
|
|
13
|
+
|
|
14
|
+
var _context = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
|
|
15
|
+
|
|
16
|
+
var _SearchResultList = _interopRequireDefault(require("@riboseinc/paneron-extension-kit/widgets/SearchResultList"));
|
|
17
|
+
|
|
18
|
+
var _cr = require("../types/cr");
|
|
19
|
+
|
|
20
|
+
var _proposal = require("../types/proposal");
|
|
21
|
+
|
|
22
|
+
var _Proposals = require("./change-request/Proposals");
|
|
23
|
+
|
|
24
|
+
var _util = require("../views/util");
|
|
25
|
+
|
|
26
|
+
var _Registration = require("./sidebar/Registration");
|
|
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
|
+
|
|
40
|
+
/** History of changes affecting given item. */
|
|
41
|
+
const ProposalHistoryDrawer = function ({
|
|
42
|
+
itemPath,
|
|
43
|
+
isOpen,
|
|
44
|
+
onClose
|
|
45
|
+
}) {
|
|
46
|
+
const {
|
|
47
|
+
spawnTab
|
|
48
|
+
} = (0, _react2.useContext)(_context.TabbedWorkspaceContext);
|
|
49
|
+
const [selectedItemPath, setSelectedItemPath] = (0, _react2.useState)(null); // Return disposed CRs
|
|
50
|
+
// that were either accepted or accepted on appeal
|
|
51
|
+
// and have the item in question.
|
|
52
|
+
|
|
53
|
+
const query = `return (
|
|
54
|
+
(${_Registration.DISPOSED_CR_QUERY})
|
|
55
|
+
&& (obj.state === "${_cr.State.ACCEPTED}" || obj.state === "${_cr.State.ACCEPTED_ON_APPEAL}")
|
|
56
|
+
&& obj.items["${itemPath}"] !== undefined
|
|
57
|
+
)`;
|
|
58
|
+
return (0, _react.jsx)(_core.Drawer, {
|
|
59
|
+
isOpen: isOpen,
|
|
60
|
+
onClose: onClose,
|
|
61
|
+
enforceFocus: false,
|
|
62
|
+
size: "50vw",
|
|
63
|
+
style: {
|
|
64
|
+
padding: '0',
|
|
65
|
+
width: 'unset'
|
|
66
|
+
}
|
|
67
|
+
}, (0, _react.jsx)(ProposalList, {
|
|
68
|
+
queryExpression: query,
|
|
69
|
+
selectedItemPath: selectedItemPath,
|
|
70
|
+
onSelectItem: setSelectedItemPath,
|
|
71
|
+
onOpenItem: (0, _react2.useCallback)(itemPath => spawnTab(`${_protocolRegistry.Protocols.CHANGE_REQUEST}:${itemPath}`), [spawnTab]),
|
|
72
|
+
extraItemViewData: (0, _react2.useMemo)(() => ({
|
|
73
|
+
itemPath
|
|
74
|
+
}), [itemPath])
|
|
75
|
+
}));
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const ProposalHistoryItem = function ({
|
|
79
|
+
objectData,
|
|
80
|
+
extraData
|
|
81
|
+
}) {
|
|
82
|
+
const justification = (0, _cr.hasSubmitterInput)(objectData) ? objectData.justification : 'N/A';
|
|
83
|
+
const change_ = (extraData === null || extraData === void 0 ? void 0 : extraData.itemPath) ? objectData.items[extraData === null || extraData === void 0 ? void 0 : extraData.itemPath] : undefined;
|
|
84
|
+
const change = (0, _proposal.isProposal)(change_) ? change_ : null;
|
|
85
|
+
return (0, _react.jsx)("span", {
|
|
86
|
+
title: `Accepted proposal “${justification}” (proposal ID: ${objectData.id})`
|
|
87
|
+
}, change ? (0, _react.jsx)(_Proposals.ProposalType, {
|
|
88
|
+
proposal: change
|
|
89
|
+
}) : null, (0, _cr.isDisposed)(objectData) ? (0, _react.jsx)(_react2.default.Fragment, null, (0, _react.jsx)(_util.Datestamp, {
|
|
90
|
+
date: objectData.timeDisposed,
|
|
91
|
+
title: "Disposed"
|
|
92
|
+
}), ": ") : (0, _cr.hadBeenProposed)(objectData) ? (0, _react.jsx)(_react2.default.Fragment, null, (0, _react.jsx)(_util.Datestamp, {
|
|
93
|
+
date: objectData.timeProposed,
|
|
94
|
+
title: "Proposed"
|
|
95
|
+
}), ": ") : null, justification);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const ProposalList = (0, _SearchResultList.default)(ProposalHistoryItem, objPath => ({
|
|
99
|
+
name: 'Prp.',
|
|
100
|
+
iconProps: {
|
|
101
|
+
icon: 'lightbulb',
|
|
102
|
+
title: objPath,
|
|
103
|
+
htmlTitle: `icon for proposal at ${objPath}`
|
|
104
|
+
}
|
|
105
|
+
}));
|
|
106
|
+
var _default = ProposalHistoryDrawer;
|
|
107
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProposalHistoryDrawer.js","sourceRoot":"","sources":["../../src/views/ProposalHistoryDrawer.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,oBAAoB,MAAM,2DAA2D,CAAC;AAE7F,OAAO,EAAe,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,+CAA+C;AAC/C,MAAM,qBAAqB,GAKtB,UAAU,EACb,QAAQ,EACR,MAAM,EAAE,OAAO,GAChB;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACxD,MAAM,CAAE,gBAAgB,EAAE,mBAAmB,CAAE,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAChF,sBAAsB;IACtB,kDAAkD;IAClD,iCAAiC;IACjC,MAAM,KAAK,GAAG;OACT,iBAAiB;yBACC,KAAK,CAAC,QAAQ,uBAAuB,KAAK,CAAC,kBAAkB;oBAClE,QAAQ;IACxB,CAAC;IACH,OAAO,CACL,IAAC,MAAM,IACH,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,KAAK,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;QACzC,IAAC,YAAY,IAClB,eAAe,EAAE,KAAK,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,mBAAmB,EACjC,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAClC,QAAQ,CAAC,GAAG,SAAS,CAAC,cAAc,IAAI,QAAQ,EAAE,CAAC,CACpD,EAAE,CAAC,QAAQ,CAAC,CAAC,EACd,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GACrD,CACK,CACV,CAAC;AACJ,CAAC,CAAC;AAGF,MAAM,mBAAmB,GAIpB,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE;IACtC,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;IACvF,MAAM,OAAO,GAAG,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,EAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,OAAO,cAAM,KAAK,EAAE,sBAAsB,aAAa,mBAAmB,UAAU,CAAC,EAAE,GAAG;QACvF,MAAM,CAAC,CAAC,CAAC,IAAC,YAAY,IAAC,QAAQ,EAAE,MAAM,GAAI,CAAC,CAAC,CAAC,IAAI;QAClD,UAAU,CAAC,UAAU,CAAC;YACrB,CAAC,CAAC;gBAAE,IAAC,SAAS,IAAC,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,EAAC,UAAU,GAAG;qBAAK;YACtE,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC;gBAC3B,CAAC,CAAC;oBAAE,IAAC,SAAS,IAAC,IAAI,EAAE,UAAU,CAAC,YAAY,EAAE,KAAK,EAAC,UAAU,GAAG;yBAAK;gBACtE,CAAC,CAAC,IAAI;QACT,aAAa,CACT,CAAC;AACV,CAAC,CAAC;AAGF,MAAM,YAAY,GAAG,oBAAoB,CAA+B,mBAAmB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzG,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,wBAAwB,OAAO,EAAE;KAC7C;CACF,CAAC,CAAC,CAAC;AAGJ,eAAe,qBAAqB,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\nimport { Drawer } from '@blueprintjs/core';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport type { InternalItemReference } from '../types';\nimport { type SomeCR, State, hasSubmitterInput, isDisposed, hadBeenProposed } from '../types/cr';\nimport { isProposal } from '../types/proposal';\nimport { ProposalType } from './change-request/Proposals';\nimport { Datestamp } from '../views/util';\nimport { DISPOSED_CR_QUERY } from './sidebar/Registration';\nimport { Protocols } from './protocolRegistry';\n\n\n/** History of changes affecting given item. */\nconst ProposalHistoryDrawer: React.FC<{\n itemPath: string\n isOpen: boolean\n onClose: () => void\n onChooseItem?: (itemRef: InternalItemReference) => void\n}> = function ({\n itemPath,\n isOpen, onClose,\n}) {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const [ selectedItemPath, setSelectedItemPath ] = useState<string | null>(null);\n // Return disposed CRs\n // that were either accepted or accepted on appeal\n // and have the item in question.\n const query = `return (\n (${DISPOSED_CR_QUERY})\n && (obj.state === \"${State.ACCEPTED}\" || obj.state === \"${State.ACCEPTED_ON_APPEAL}\")\n && obj.items[\"${itemPath}\"] !== undefined\n )`;\n return (\n <Drawer\n isOpen={isOpen}\n onClose={onClose}\n enforceFocus={false}\n size=\"50vw\"\n style={{ padding: '0', width: 'unset' }}>\n <ProposalList\n\tqueryExpression={query}\n\tselectedItemPath={selectedItemPath}\n\tonSelectItem={setSelectedItemPath}\n\tonOpenItem={useCallback((itemPath =>\n\t spawnTab(`${Protocols.CHANGE_REQUEST}:${itemPath}`)\n\t), [spawnTab])}\n\textraItemViewData={useMemo(() => ({ itemPath }), [itemPath])}\n />\n </Drawer>\n );\n};\n\n\nconst ProposalHistoryItem: React.FC<{\n objectData: SomeCR,\n extraData?: { itemPath: string },\n objectPath: string,\n}> = function ({ objectData, extraData }) {\n const justification = hasSubmitterInput(objectData) ? objectData.justification : 'N/A';\n const change_ = extraData?.itemPath ? objectData.items[extraData?.itemPath] : undefined;\n const change = isProposal(change_) ? change_ : null;\n return <span title={`Accepted proposal “${justification}” (proposal ID: ${objectData.id})`}>\n {change ? <ProposalType proposal={change} /> : null}\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 ProposalList = makeSearchResultList<SomeCR, { itemPath: string }>(ProposalHistoryItem, (objPath) => ({\n name: 'Prp.',\n iconProps: {\n icon: 'lightbulb',\n title: objPath,\n htmlTitle: `icon for proposal at ${objPath}`,\n },\n}));\n\n\nexport default ProposalHistoryDrawer;\n"]}
|
package/views/SearchQuery.js
CHANGED
|
@@ -93,13 +93,12 @@ const SearchQuery = (0, _react.memo)(function ({
|
|
|
93
93
|
className: className
|
|
94
94
|
}, (0, _react2.jsx)(_core.InputGroup, {
|
|
95
95
|
fill: true,
|
|
96
|
-
small: true,
|
|
97
96
|
inputRef: quickSearchInputRef,
|
|
98
97
|
disabled: !quickSearchIsEnabled,
|
|
99
98
|
value: hasAdvancedQuery ? '' : quickSearchString,
|
|
100
99
|
leftIcon: "search",
|
|
101
100
|
placeholder: "Quick search",
|
|
102
|
-
title: !hasAdvancedQuery ? "Search for a substring occurring anywhere within serialized item data." : "Advanced query overrides quick search.",
|
|
101
|
+
title: !hasAdvancedQuery ? "Search for a substring occurring anywhere within serialized item data." : "Advanced query overrides quick search. Delete advanced query to re-enable.",
|
|
103
102
|
css: (0, _react2.css)`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`,
|
|
104
103
|
rightElement: (0, _react2.jsx)(_core.Button, {
|
|
105
104
|
disabled: !onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery,
|
|
@@ -115,6 +114,7 @@ const SearchQuery = (0, _react.memo)(function ({
|
|
|
115
114
|
}, (0, _react2.jsx)(_core.Button, {
|
|
116
115
|
fill: true,
|
|
117
116
|
small: true,
|
|
117
|
+
minimal: true,
|
|
118
118
|
title: "Edit advanced search query",
|
|
119
119
|
icon: 'filter',
|
|
120
120
|
onClick: !hasAdvancedQuery ? () => {
|
package/views/SearchQuery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC1F,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,8BAA8B,MAAM,iDAAiD,CAAC;AAC7F,+EAA+E;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,WAAW,GASZ,IAAI,CAAC,UAAU,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,SAAS,GACV;IACC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,uBAAuB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEtF,MAAM,CAAE,eAAe,EAAE,qBAAqB,CAAE,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,iBAAiB,aAAjB,iBAAiB,cAAjB,iBAAiB,GAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE/D,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAE1D,MAAM,mBAAmB,GAAG,WAAW,CAAC,SAAS,mBAAmB;QAClE,IAAI,iBAAiB,EAAE;YACrB,IAAI,uBAAuB,EAAE;gBAC3B,OAAO;oBACL,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAC7B,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,EAChE,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;iBACF,CAAA;aACF;iBAAM;gBACL,OAAO;oBACL,GAAG,EAAE,eAAe;oBACpB,KAAK,EAAE,aAAa,CAAC,OAAO,CAC1B,EAAE,SAAS,EAAE,iBAAiB,EAAE,EAChC,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;iBACF,CAAA;aACF;SACF;aAAM;YACL,OAAO;gBACL,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAC7B,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAC7B,EAAE,WAAW,EAAE,YAAY,EAAE,CAC9B;aACF,CAAA;SACF;IACH,CAAC,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5E,MAAM,oBAAoB,GAAG,yBAAyB,IAAI,CAAC,gBAAgB,CAAC;IAC5E,MAAM,mBAAmB,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAC;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,oBAAoB,IAAI,mBAAmB,CAAC,OAAO,EAAE;YACvD,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;SACrC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,IAAC,YAAY,IAAC,IAAI,QAAC,QAAQ,QAAC,SAAS,EAAE,SAAS;QAC9C,IAAC,UAAU,IACT,IAAI,QACJ,
|
|
1
|
+
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useEffect, useRef, useState, useContext, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, ControlGroup, Colors, InputGroup, Tag, ButtonGroup } from '@blueprintjs/core';\nimport CriteriaTree from './FilterCriteria';\nimport { CUSTOM_CONDITION, RAW_SUBSTRING } from './FilterCriteria/CRITERIA_CONFIGURATION';\nimport { CriteriaGroup, Criterion } from './FilterCriteria/models';\nimport criteriaGroupToQueryExpression from './FilterCriteria/criteriaGroupToQueryExpression';\n//import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';\nimport { BrowserCtx } from './BrowserCtx';\n\n\nconst SearchQuery: React.FC<{\n rootCriteria: CriteriaGroup;\n onCriteriaChange?: (rootCriteria: CriteriaGroup) => void;\n\n quickSearchString: string;\n onQuickSearchStringChange?: (searchString: string) => void;\n\n availableClassIDs?: string[];\n className?: string;\n}> = memo(function ({\n rootCriteria,\n onCriteriaChange,\n quickSearchString,\n onQuickSearchStringChange,\n availableClassIDs,\n className,\n}) {\n const { itemClasses, subregisters, getQuickSearchPredicate } = useContext(BrowserCtx);\n\n const [ editingAdvanced, toggleEditingAdvanced ] = useState<boolean>(false);\n\n const classIDs = availableClassIDs ?? Object.keys(itemClasses);\n\n const hasAdvancedQuery = rootCriteria.criteria.length > 0;\n\n const makeDefaultCriteria = useCallback(function makeDefaultCriteria(): Criterion {\n if (quickSearchString) {\n if (getQuickSearchPredicate) {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: getQuickSearchPredicate(quickSearchString) },\n { itemClasses, subregisters },\n ),\n }\n } else {\n return {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters },\n ),\n }\n }\n } else {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: 'false' },\n { itemClasses, subregisters },\n ),\n }\n }\n }, [quickSearchString, getQuickSearchPredicate, itemClasses, subregisters]);\n\n const quickSearchIsEnabled = onQuickSearchStringChange && !hasAdvancedQuery;\n const quickSearchInputRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n if (quickSearchIsEnabled && quickSearchInputRef.current) {\n quickSearchInputRef.current.focus();\n }\n }, []);\n\n return (\n <ControlGroup fill vertical className={className}>\n <InputGroup\n fill\n inputRef={quickSearchInputRef}\n disabled={!quickSearchIsEnabled}\n value={hasAdvancedQuery ? '' : quickSearchString}\n leftIcon=\"search\"\n placeholder=\"Quick search\"\n title={!hasAdvancedQuery\n ? \"Search for a substring occurring anywhere within serialized item data.\"\n : \"Advanced query overrides quick search. Delete advanced query to re-enable.\"}\n css={css`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`}\n rightElement={<Button\n disabled={!onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery}\n onClick={() => onQuickSearchStringChange?.('')}\n small\n minimal\n icon=\"cross\"\n title=\"Clear quick search\" />}\n onChange={evt => onQuickSearchStringChange?.(evt.currentTarget.value)}\n />\n <ButtonGroup fill>\n <Button\n fill\n small\n minimal\n title=\"Edit advanced search query\"\n icon='filter'\n onClick={!hasAdvancedQuery\n ? (() => {\n onCriteriaChange!({ criteria: [makeDefaultCriteria()], require: 'all' });\n toggleEditingAdvanced(true);\n })\n : () => toggleEditingAdvanced(v => !v)}\n active={editingAdvanced && hasAdvancedQuery}\n disabled={!hasAdvancedQuery && !onCriteriaChange}\n rightIcon={rootCriteria.criteria.length > 0\n ? <Tag intent=\"success\" round>on</Tag>\n : <Tag round>off</Tag>}>\n Advanced\n </Button>\n </ButtonGroup>\n {hasAdvancedQuery && editingAdvanced\n ? <>\n <CriteriaTree\n key=\"tree\"\n criteria={rootCriteria}\n onChange={onCriteriaChange}\n itemClasses={itemClasses}\n availableClassIDs={classIDs}\n subregisters={subregisters}\n css={css`max-height: 50vh; overflow-y: auto;`}\n />\n <div\n key=\"query\"\n css={css`\n margin-top: 5px;\n padding: 0 10px 10px 10px;\n color: ${Colors.GRAY3};\n font-size: 90%;\n overflow-wrap: break-word;\n `}>\n Query used: <code>{criteriaGroupToQueryExpression(rootCriteria)}</code>\n </div>\n </>\n : null}\n </ControlGroup>\n );\n});\n\nexport default SearchQuery;\n"]}
|
|
@@ -21,6 +21,9 @@ interface ProposalBrowserProps<CR extends Drafted> {
|
|
|
21
21
|
* If no proposals exist, returns null.
|
|
22
22
|
*/
|
|
23
23
|
export declare function Proposals<CR extends Drafted>({ proposals, onDeleteProposalForItemAtPath, selectedItem, onSelectItem: selectProposal }: ProposalBrowserProps<CR>): jsx.JSX.Element;
|
|
24
|
+
export declare function ProposalType({ proposal }: {
|
|
25
|
+
proposal: ChangeProposal;
|
|
26
|
+
}): jsx.JSX.Element;
|
|
24
27
|
interface ProposalProps<P extends ChangeProposal> {
|
|
25
28
|
proposal: P;
|
|
26
29
|
/** Highlight changes. */
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Proposals = Proposals;
|
|
7
|
+
exports.ProposalType = ProposalType;
|
|
7
8
|
exports.default = exports.ProposalSummary = exports.ProposalDetail = void 0;
|
|
8
9
|
|
|
9
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -265,7 +266,7 @@ function Proposals({
|
|
|
265
266
|
description: `${cpi.proposal.type} proposal`,
|
|
266
267
|
key: cpi.itemPath
|
|
267
268
|
}, (0, _react2.jsx)(ProposalType, {
|
|
268
|
-
|
|
269
|
+
proposal: cpi.proposal
|
|
269
270
|
}), (0, _react2.jsx)("div", {
|
|
270
271
|
css: (0, _react2.css)`padding: 5px; flex-grow: 1;`
|
|
271
272
|
}, cpi.item !== null ? (0, _react2.jsx)(_core.H5, {
|
|
@@ -284,11 +285,11 @@ function Proposals({
|
|
|
284
285
|
;
|
|
285
286
|
|
|
286
287
|
function ProposalType({
|
|
287
|
-
|
|
288
|
+
proposal
|
|
288
289
|
}) {
|
|
289
|
-
const proposalConfig =
|
|
290
|
+
const proposalConfig = proposal.type === 'amendment' ? PROPOSAL_VIEWS[proposal.amendmentType] : PROPOSAL_VIEWS[proposal.type]; //const ProposalTypeLabel: React.FC<ProposalProps<any>> = proposalConfig.summary;
|
|
290
291
|
|
|
291
|
-
const tagProps = (0, _util.proposalToTagProps)(
|
|
292
|
+
const tagProps = (0, _util.proposalToTagProps)(proposal);
|
|
292
293
|
return (0, _react2.jsx)(_core.Tag, {
|
|
293
294
|
minimal: true,
|
|
294
295
|
...tagProps,
|
|
@@ -309,7 +310,7 @@ const ChangeProposalItemView = (item, {
|
|
|
309
310
|
active: modifiers.active,
|
|
310
311
|
disabled: modifiers.disabled,
|
|
311
312
|
labelElement: (0, _react2.jsx)(ProposalType, {
|
|
312
|
-
|
|
313
|
+
proposal: i.proposal
|
|
313
314
|
}),
|
|
314
315
|
key: item.itemPath,
|
|
315
316
|
onClick: handleClick,
|