@riboseinc/paneron-registry-kit 2.2.39 → 2.2.41
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/proposals/MetaProperties.js +23 -19
- package/proposals/MetaProperties.js.map +1 -1
- package/proposals/NewProposalMenu.js +4 -4
- package/proposals/NewProposalMenu.js.map +1 -1
- package/proposals/Search.js +6 -1
- package/proposals/Search.js.map +1 -1
- package/views/detail/RegisterHome2/index.js +1 -1
- package/views/detail/RegisterHome2/index.js.map +1 -1
- package/views/detail/RegisterItem/index.js +82 -2
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/detail/RegisterMeta/RegisterMetaForm.js +31 -17
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
- package/views/hooks/useRegisterVersion.js +1 -1
- package/views/hooks/useRegisterVersion.js.map +1 -1
- package/views/index.js +6 -6
- package/views/index.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.41",
|
|
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.28",
|
|
32
32
|
"@types/react": "17.0.53",
|
|
33
33
|
"@types/react-dom": "^17.0.2",
|
|
34
34
|
"@types/react-helmet": "^6.1.2",
|
|
@@ -70,29 +70,33 @@ const Summary = function ({
|
|
|
70
70
|
|
|
71
71
|
return ((_a = register === null || register === void 0 ? void 0 : register.stakeholders) !== null && _a !== void 0 ? _a : []).find(s => (0, _types.isCreatedBy)(s, cr));
|
|
72
72
|
}, [register, cr]);
|
|
73
|
-
const isCurrentMarker =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
73
|
+
const isCurrentMarker = (0, _react.useMemo)(() => {
|
|
74
|
+
const proposedAgainstCurrentVersion = cr.registerVersion === currentVersion;
|
|
75
|
+
const shouldShowMarker = compareRegisterVersion && cr.registerVersion;
|
|
76
|
+
const marker = shouldShowMarker ? (0, _react2.jsx)(_core.Tag, {
|
|
77
|
+
css: (0, _react2.css)`display: inline;`,
|
|
78
|
+
intent: currentVersion ? proposedAgainstCurrentVersion ? 'success' : 'warning' : undefined,
|
|
79
|
+
minimal: true,
|
|
80
|
+
round: true
|
|
81
|
+
}, currentVersion ? proposedAgainstCurrentVersion ? (0, _react2.jsx)(_react.default.Fragment, null, "current", " ", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
82
|
+
intent: 'success',
|
|
83
|
+
content: (0, _react2.jsx)(_react.default.Fragment, null, "Published version of the register", " ", "had not changed since this proposal started.")
|
|
84
|
+
})) : (0, _react2.jsx)(_react.default.Fragment, null, "not current", " ", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
85
|
+
intent: 'warning',
|
|
86
|
+
icon: 'warning-sign',
|
|
87
|
+
content: (0, _react2.jsx)(_react.default.Fragment, null, "Register is currently at version ", (0, _react2.jsx)("strong", null, currentVersion), ",", " ", "which is different from version proposal author may have had in mind.", " ", "It is recommended that proposed changes are reviewed to avoid unintentionally", " ", "undoing a prior change.")
|
|
88
|
+
})) : (0, _react2.jsx)(_react.default.Fragment, null, "unable to compare", " ", (0, _react2.jsx)(_HelpTooltip.default, {
|
|
89
|
+
intent: undefined,
|
|
90
|
+
icon: 'warning-sign',
|
|
91
|
+
content: (0, _react2.jsx)(_react.default.Fragment, null, "Unable to determine current register version.", " ", "This may be the case if there are no accepted proposals (since register version is derived from latest accepted proposal).", " ", "Barring that, there may be a data integrity issue.")
|
|
92
|
+
}))) : null;
|
|
93
|
+
return marker ? (0, _react2.jsx)(_react.default.Fragment, null, "\u2002", marker) : null;
|
|
94
|
+
}, [cr.registerVersion, currentVersion, compareRegisterVersion]);
|
|
91
95
|
return (0, _react2.jsx)(_react.default.Fragment, null, submittingStakeholder ? (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Author:"), (0, _react2.jsx)("dd", null, (0, _react2.jsx)(_RegisterStakeholder.RegisterStakeholderListItem, {
|
|
92
96
|
stakeholder: submittingStakeholder,
|
|
93
97
|
showRole: true,
|
|
94
98
|
isCurrentUser: (currentStakeholder ? (0, _types.isCreatedBy)(currentStakeholder, cr) : false) || undefined
|
|
95
|
-
}))) : null, (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Register\u00A0version before\u00A0proposal:"), (0, _react2.jsx)("dd", null, registerVersion, isCurrentMarker
|
|
99
|
+
}))) : null, (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Register\u00A0version before\u00A0proposal:"), (0, _react2.jsx)("dd", null, registerVersion, isCurrentMarker)), (0, _react2.jsx)("div", null, (0, _react2.jsx)("dt", null, "Proposal\u00A0ID:"), (0, _react2.jsx)("dd", null, (0, _react2.jsx)("code", {
|
|
96
100
|
css: (0, _react2.css)`white-space: nowrap;`
|
|
97
101
|
}, cr.id))));
|
|
98
102
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetaProperties.js","sourceRoot":"","sources":["../../src/proposals/MetaProperties.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,yBAAyB,MAAM,0CAA0C,CAAC;AAEjF,OAAO,kBAAkB,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAGtE,4DAA4D;AAC5D,MAAM,OAAO,GAMR,UAAU,EAAE,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,sBAAsB,EAAE;;IACzE,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,MAAA,MAAA,aAAa,CAAC;QACrC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACnC,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC,KAAK,0CAAE,IAAI,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAY,mCAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvE,MAAM,eAAe,GAAG,gBAAgB,IAAI,iBAAiB,CAAC,gBAAgB,CAAC;QAC7E,CAAC,CAAC,IAAC,kBAAkB,IAAC,QAAQ,QAAC,QAAQ,EAAE,gBAA0B,GAAI;QACvE,CAAC,CAAC,MAAA,EAAE,CAAC,eAAe,mCAAI,KAAK,CAAC;IAEhC,IAAI,cAAkC,CAAC;IACvC,IAAI;QACF,cAAc,GAAG,MAAA,MAAA,yBAAyB,EAAE,0CAAE,EAAE,mCAAI,SAAS,CAAC;KAC/D;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,cAAc,GAAG,SAAS,CAAC;KAC5B;IAED,MAAM,qBAAqB,GAAG,OAAO,CACnC,CAAC,GAAG,EAAE,WAAC,OAAA,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA,EAAA,CAAC,EACpE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAElB,MAAM,eAAe,GAAG,EAAE,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"MetaProperties.js","sourceRoot":"","sources":["../../src/proposals/MetaProperties.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,yBAAyB,MAAM,0CAA0C,CAAC;AAEjF,OAAO,kBAAkB,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAGtE,4DAA4D;AAC5D,MAAM,OAAO,GAMR,UAAU,EAAE,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,sBAAsB,EAAE;;IACzE,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,MAAA,MAAA,aAAa,CAAC;QACrC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACnC,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC,KAAK,0CAAE,IAAI,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAY,mCAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvE,MAAM,eAAe,GAAG,gBAAgB,IAAI,iBAAiB,CAAC,gBAAgB,CAAC;QAC7E,CAAC,CAAC,IAAC,kBAAkB,IAAC,QAAQ,QAAC,QAAQ,EAAE,gBAA0B,GAAI;QACvE,CAAC,CAAC,MAAA,EAAE,CAAC,eAAe,mCAAI,KAAK,CAAC;IAEhC,IAAI,cAAkC,CAAC;IACvC,IAAI;QACF,cAAc,GAAG,MAAA,MAAA,yBAAyB,EAAE,0CAAE,EAAE,mCAAI,SAAS,CAAC;KAC/D;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,cAAc,GAAG,SAAS,CAAC;KAC5B;IAED,MAAM,qBAAqB,GAAG,OAAO,CACnC,CAAC,GAAG,EAAE,WAAC,OAAA,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA,EAAA,CAAC,EACpE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAElB,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,6BAA6B,GAAG,EAAE,CAAC,eAAe,KAAK,cAAc,CAAC;QAC5E,MAAM,gBAAgB,GAAG,sBAAsB,IAAI,EAAE,CAAC,eAAe,CAAC;QACtE,MAAM,MAAM,GAAG,gBAAgB;YAC7B,CAAC,CAAC,IAAC,GAAG,IACA,GAAG,EAAE,GAAG,CAAA,kBAAkB,EAC1B,MAAM,EAAE,cAAc;oBACpB,CAAC,CAAC,6BAA6B;wBAC7B,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,SAAS;oBACb,CAAC,CAAC,SAAS,EACb,OAAO,QACP,KAAK,UACN,cAAc;gBACb,CAAC,CAAC,6BAA6B;oBAC7B,CAAC,CAAC;;wBAEG,GAAG;wBACJ,IAAC,WAAW,IAAC,MAAM,EAAC,SAAS,EAAC,OAAO,EAAE;;gCAEpC,GAAG;+EAEH,GAAI,CACN;oBACL,CAAC,CAAC;;wBAEG,GAAG;wBACJ,IAAC,WAAW,IAAC,MAAM,EAAC,SAAS,EAAC,IAAI,EAAC,cAAc,EAAC,OAAO,EAAE;;gCACxB,oBAAS,cAAc,CAAU;;gCACjE,GAAG;;gCAEH,GAAG;;gCAEH,GAAG;0DAEH,GAAI,CACN;gBACP,CAAC,CAAC;;oBAEG,GAAG;oBACJ,IAAC,WAAW,IAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,cAAc,EAAC,OAAO,EAAE;;4BAE1D,GAAG;;4BAGH,GAAG;iFAEH,GAAI,CACN,CACH;YACR,CAAC,CAAC,IAAI,CAAC;QACT,OAAO,MAAM,CAAC,CAAC,CAAC;;YAAS,MAAM,CAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAEjE,OAAO,CACL;QACG,qBAAqB;YACpB,CAAC,CAAC;gBACE,0BAAgB;gBAChB;oBACE,IAAC,2BAA2B,IAC1B,WAAW,EAAE,qBAAqB,EAClC,QAAQ,QACR,aAAa,EAAE,CAAC,kBAAkB;4BAChC,CAAC,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE,CAAC;4BACrC,CAAC,CAAC,KAAK,CAAC,IAAI,SAAS,GACvB,CACC,CACD;YACR,CAAC,CAAC,IAAI;QAER;YACE,8DAEK;YACL;gBACG,eAAe;gBACf,eAAe,CACb,CACD;QAEN;YACE,oCAA0B;YAC1B;gBAAI,cAAM,GAAG,EAAE,GAAG,CAAA,sBAAsB,IAAG,EAAE,CAAC,EAAE,CAAQ,CAAK,CACzD,CACL,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Tag } from '@blueprintjs/core';\n\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\n\nimport { RegisterStakeholderListItem } from '../views/RegisterStakeholder';\nimport type { Register, RegisterStakeholder } from '../types';\nimport { crIDToCRPath } from '../views/itemPathUtils';\nimport useLatestAcceptedProposal from '../views/hooks/useLatestAcceptedProposal';\n\nimport ProposalAsListItem from './ListItem';\nimport { hasSubmitterInput, isCreatedBy, type SomeCR } from './types';\n\n\n/** Proposal meta properties, must be nested within a DL. */\nconst Summary: React.FC<{\n cr: SomeCR\n register?: Register\n currentStakeholder?: RegisterStakeholder\n submittingStakeholder?: RegisterStakeholder\n compareRegisterVersion?: boolean\n}> = function ({ cr, currentStakeholder, register, compareRegisterVersion }) {\n const { useObjectData } = useContext(DatasetContext);\n\n const crPath = crIDToCRPath(cr.registerVersion);\n const previousProposal = useObjectData({\n objectPaths: crPath ? [crPath] : [],\n nounLabel: 'proposal(s)',\n }).value?.data[crPath ?? ''] as unknown ?? (crPath ? undefined : null);\n\n const registerVersion = previousProposal && hasSubmitterInput(previousProposal)\n ? <ProposalAsListItem showTime proposal={previousProposal as SomeCR} />\n : cr.registerVersion ?? 'N/A';\n\n let currentVersion: string | undefined;\n try {\n currentVersion = useLatestAcceptedProposal()?.id ?? undefined;\n } catch (e) {\n console.error(\"Failed to obtain latest accepted proposal\");\n currentVersion = undefined;\n }\n\n const submittingStakeholder = useMemo(\n (() => (register?.stakeholders ?? []).find(s => isCreatedBy(s, cr))),\n [register, cr]);\n\n const isCurrentMarker = useMemo(() => {\n const proposedAgainstCurrentVersion = cr.registerVersion === currentVersion;\n const shouldShowMarker = compareRegisterVersion && cr.registerVersion;\n const marker = shouldShowMarker\n ? <Tag\n css={css`display: inline;`}\n intent={currentVersion\n ? proposedAgainstCurrentVersion\n ? 'success'\n : 'warning'\n : undefined}\n minimal\n round>\n {currentVersion\n ? proposedAgainstCurrentVersion\n ? <>\n current\n {\" \"}\n <HelpTooltip intent='success' content={<>\n Published version of the register\n {\" \"}\n had not changed since this proposal started.\n </>} />\n </>\n : <>\n not current\n {\" \"}\n <HelpTooltip intent='warning' icon='warning-sign' content={<>\n Register is currently at version <strong>{currentVersion}</strong>,\n {\" \"}\n which is different from version proposal author may have had in mind.\n {\" \"}\n It is recommended that proposed changes are reviewed to avoid unintentionally\n {\" \"}\n undoing a prior change.\n </>} />\n </>\n : <>\n unable to compare\n {\" \"}\n <HelpTooltip intent={undefined} icon='warning-sign' content={<>\n Unable to determine current register version.\n {\" \"}\n This may be the case if there are no accepted proposals\n (since register version is derived from latest accepted proposal).\n {\" \"}\n Barring that, there may be a data integrity issue.\n </>} />\n </>}\n </Tag>\n : null;\n return marker ? <> {marker}</> : null;\n }, [cr.registerVersion, currentVersion, compareRegisterVersion]);\n\n return (\n <>\n {submittingStakeholder\n ? <div>\n <dt>Author:</dt>\n <dd>\n <RegisterStakeholderListItem\n stakeholder={submittingStakeholder}\n showRole\n isCurrentUser={(currentStakeholder\n ? isCreatedBy(currentStakeholder, cr)\n : false) || undefined}\n />\n </dd>\n </div>\n : null}\n\n <div>\n <dt>\n Register version before proposal:\n </dt>\n <dd>\n {registerVersion}\n {isCurrentMarker}\n </dd>\n </div>\n\n <div>\n <dt>Proposal ID:</dt>\n <dd><code css={css`white-space: nowrap;`}>{cr.id}</code></dd>\n </div>\n </>\n );\n};\n\nexport default Summary;\n"]}
|
|
@@ -31,26 +31,26 @@ const NewProposalMenu = function ({
|
|
|
31
31
|
const createMenu = (0, _react2.jsx)(_core.Menu, {
|
|
32
32
|
css: (0, _react2.css)`overflow-y: auto; background: none !important;`
|
|
33
33
|
}, (0, _react2.jsx)(_core.MenuItem, {
|
|
34
|
-
text: "Start
|
|
34
|
+
text: "Start new proposal",
|
|
35
35
|
onClick: onCreateBlank && !createMode ? () => setCreateMode(true) : undefined,
|
|
36
36
|
disabled: !onCreateBlank,
|
|
37
37
|
active: creatingBlank,
|
|
38
38
|
selected: creatingBlank,
|
|
39
39
|
icon: "add"
|
|
40
40
|
}), (0, _react2.jsx)(_core.MenuItem, {
|
|
41
|
-
text: "Import proposal",
|
|
41
|
+
text: "Import new proposal",
|
|
42
42
|
onClick: onImport,
|
|
43
43
|
disabled: !onImport || creatingBlank,
|
|
44
44
|
icon: "import"
|
|
45
45
|
}));
|
|
46
46
|
stack.push({
|
|
47
|
-
title: "
|
|
47
|
+
title: "",
|
|
48
48
|
renderPanel: () => createMenu
|
|
49
49
|
});
|
|
50
50
|
|
|
51
51
|
if (creatingBlank) {
|
|
52
52
|
stack.push({
|
|
53
|
-
title: "Start
|
|
53
|
+
title: "Start new proposal",
|
|
54
54
|
renderPanel: () => (0, _react2.jsx)(NewProposal, {
|
|
55
55
|
previousVersion: previousVersion,
|
|
56
56
|
onCreateBlank: onCreateBlank,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewProposalMenu.js","sourceRoot":"","sources":["../../src/proposals/NewProposalMenu.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,WAAW,EACX,OAAO,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,MAAM,EACN,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,WAAW,IAAI,UAAU,EACzB,IAAI,EAAE,QAAQ,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,MAAM,eAAe,GAKhB,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE;IACpE,MAAM,CAAE,UAAU,EAAE,aAAa,CAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,aAAa,IAAI,UAAU,CAAC;IAElD,MAAM,KAAK,GAAiB,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,CACjB,IAAC,IAAI,IAAC,GAAG,EAAE,GAAG,CAAA,gDAAgD;YAC5D,IAAC,QAAQ,IACP,IAAI,EAAC,
|
|
1
|
+
{"version":3,"file":"NewProposalMenu.js","sourceRoot":"","sources":["../../src/proposals/NewProposalMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useState,\n useCallback,\n useMemo,\n} from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n Button,\n FormGroup,\n ControlGroup,\n TextArea,\n PanelStack2 as PanelStack, type Panel,\n Menu, MenuItem,\n NonIdealState,\n} from '@blueprintjs/core';\n\n\nconst NewProposalMenu: React.FC<{\n className?: string\n previousVersion: string | null\n onCreateBlank?: (idea: string) => Promise<void>\n onImport?: () => Promise<void>\n}> = function ({ previousVersion, onCreateBlank, onImport, className }) {\n const [ createMode, setCreateMode ] = useState(false);\n const creatingBlank = onCreateBlank && createMode;\n\n const stack: Panel<any>[] = useMemo(() => {\n const stack = [];\n const createMenu = (\n <Menu css={css`overflow-y: auto; background: none !important;`}>\n <MenuItem \n text=\"Start new proposal\"\n onClick={(onCreateBlank && !createMode)\n ? (() => setCreateMode(true))\n : undefined}\n disabled={!onCreateBlank}\n active={creatingBlank}\n selected={creatingBlank}\n icon=\"add\"\n />\n <MenuItem\n text=\"Import new proposal\"\n onClick={onImport}\n disabled={!onImport || creatingBlank}\n icon=\"import\"\n />\n </Menu>\n );\n\n stack.push({\n title: \"\",\n renderPanel: () => createMenu,\n });\n\n if (creatingBlank) {\n stack.push({\n title: \"Start new proposal\",\n renderPanel: () =>\n <NewProposal\n previousVersion={previousVersion}\n onCreateBlank={onCreateBlank}\n css={css`padding: 5px;`}\n />,\n });\n }\n return stack;\n }, [onCreateBlank, onImport, creatingBlank, previousVersion]);\n\n return <PanelStack\n css={css`flex: 1; overflow: unset; .bp4-panel-stack-view { background: none; border: none; }`}\n className={className}\n onClose={() => setCreateMode(false)}\n stack={stack.length > 0\n ? stack\n : [{ title: '', renderPanel: () => <NonIdealState title=\"Nothing to show\" /> }]}\n />;\n};\n\nexport default NewProposalMenu;\n\n\nconst NewProposal: React.VoidFunctionComponent<{\n previousVersion: string | null\n onCreateBlank?: (idea: string) => Promise<void>\n className?: string\n}> = function ({ previousVersion, onCreateBlank, className }) {\n const [ newProposalIdea, setNewProposalIdea ] = useState('');\n\n const handleNewProposal = useCallback(async function handleNewProposal () {\n if (newProposalIdea.trim()) {\n await onCreateBlank?.(newProposalIdea);\n setNewProposalIdea('');\n } else {\n throw new Error(\"Cannot create proposal: need some initial motivation for the change\");\n }\n }, [newProposalIdea, onCreateBlank]);\n\n return (\n <FormGroup\n className={className}\n css={css`overflow-y: auto;`}\n label={<>\n Propose\n {previousVersion\n ? ` a change to version ${previousVersion}:`\n : ` the first change:`}\n </>}>\n <ControlGroup vertical>\n <TextArea\n value={newProposalIdea ?? ''}\n placeholder=\"Your idea…\"\n title=\"Justification draft (you can change this later)\"\n onChange={evt => setNewProposalIdea(evt.currentTarget.value)}\n />\n <Button\n fill\n intent={newProposalIdea ? 'primary': undefined}\n disabled={!newProposalIdea.trim() || !onCreateBlank}\n title=\"A blank proposal will be created and opened in a new tab.\"\n onClick={handleNewProposal}\n icon=\"tick\">\n Create\n </Button>\n </ControlGroup>\n </FormGroup>\n );\n};\n"]}
|
package/proposals/Search.js
CHANGED
|
@@ -40,13 +40,18 @@ const ProposalItem = function ({
|
|
|
40
40
|
const clsConfig = getRelatedItemClassConfiguration(itemRef.classID);
|
|
41
41
|
const ListItemView = clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.itemView;
|
|
42
42
|
const itemPayload = (_b = registerItem === null || registerItem === void 0 ? void 0 : registerItem.data) !== null && _b !== void 0 ? _b : null;
|
|
43
|
-
const itemView = itemPayload && ListItemView ? (0, _react2.jsx)(_react.default.Fragment, null,
|
|
43
|
+
const itemView = itemPayload && ListItemView ? (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)("div", null, clsConfig.title), (0, _react2.jsx)(ListItemView, {
|
|
44
44
|
itemData: itemPayload,
|
|
45
45
|
itemRef: itemRef
|
|
46
46
|
})) : (0, _react2.jsx)("span", {
|
|
47
47
|
css: (0, _react2.css)`opacity: .4`
|
|
48
48
|
}, "(missing item data at ", itemPath, ")");
|
|
49
49
|
return (0, _react2.jsx)(_List.LabelledListIcon, {
|
|
50
|
+
contentStyle: {
|
|
51
|
+
display: 'flex',
|
|
52
|
+
flexFlow: 'row nowrap',
|
|
53
|
+
gap: '10px'
|
|
54
|
+
},
|
|
50
55
|
isSelected: extraData.selectedItemPath === itemPath,
|
|
51
56
|
onSelect: onSelect,
|
|
52
57
|
onOpen: onOpen,
|
package/proposals/Search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Search.js","sourceRoot":"","sources":["../../src/proposals/Search.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,EAAE,EAAkB,gBAAgB,EAAiB,MAAM,+CAA+C,CAAC;AAG1H,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAsBjD,MAAM,YAAY,GAClB,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;;IAC1D,MAAM,EAAE,YAAY,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAElF,MAAM,YAAY,GAAG,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,MAAA,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,mCAAI,IAAI,CAAC;IAE5E,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,KAAK,SAAS,EAAE,QAAQ,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,gCAAgC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC;IACzC,MAAM,WAAW,GAA+B,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,mCAAI,IAAI,CAAC;IAE3E,MAAM,QAAQ,GAAG,WAAW,IAAI,YAAY;QAC1C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Search.js","sourceRoot":"","sources":["../../src/proposals/Search.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport makeList, { type ItemProps, LabelledListIcon, type ListData } from '@riboseinc/paneron-extension-kit/widgets/List';\n\nimport type { RegisterItem } from '../types/item';\nimport { itemPathInCR, itemPathToItemRef } from '../views/itemPathUtils';\nimport { BrowserCtx } from '../views/BrowserCtx';\n\nimport type { SomeCR } from './types';\nimport type { ChangeProposal } from './types';\n\n\nexport interface ProposalListData {\n selectedItemPath: string | null;\n extraItemViewData: { proposal: SomeCR, itemData: Record<string, RegisterItem<any> | null> }\n}\n\nexport interface SearchResultListProps {\n queryExpression: string;\n selectedItemPath: string | null;\n onSelectItem: (itemPath: string | null) => void;\n onOpenItem?: (itemPath: string) => void;\n keyExpression?: string;\n extraItemViewData: { proposal: SomeCR, itemData: Record<string, RegisterItem<any> | null> }\n className?: string;\n}\n\n\nconst ProposalItem: React.FC<ItemProps<ProposalListData>> =\nfunction ({ onSelect, onOpen, extraData, itemRef: itemPath }) {\n const { subregisters, getRelatedItemClassConfiguration } = useContext(BrowserCtx);\n\n const proposalItem = extraData.extraItemViewData.proposal.items[itemPath];\n const registerItem = extraData.extraItemViewData.itemData[itemPath] ?? null;\n\n const itemRef = itemPathToItemRef(subregisters !== undefined, itemPath);\n\n const clsConfig = getRelatedItemClassConfiguration(itemRef.classID);\n const ListItemView = clsConfig?.itemView;\n const itemPayload: Record<string, any> | null = registerItem?.data ?? null;\n \n const itemView = itemPayload && ListItemView\n ? <>\n <div>{clsConfig.title}</div>\n <ListItemView\n itemData={itemPayload}\n itemRef={itemRef}\n />\n </>\n : <span css={css`opacity: .4`}>\n (missing item data at {itemPath})\n </span>;\n\n return (\n <LabelledListIcon\n contentStyle={{ display: 'flex', flexFlow: 'row nowrap', gap: '10px' }}\n isSelected={extraData.selectedItemPath === itemPath}\n onSelect={onSelect}\n onOpen={onOpen}\n //contentClassName={(isUpdating && !objData) ? Classes.SKELETON : undefined}\n entityType={{ name: proposalItem.type }}>\n {itemView}\n </LabelledListIcon>\n );\n};\n\nconst List = makeList<ProposalListData>(ProposalItem);\n\nexport const ProposalSearchResultList: React.FC<SearchResultListProps> =\nmemo(function ({ extraItemViewData, queryExpression, selectedItemPath, onSelectItem, onOpenItem, className }) {\n const { useRegisterItemData, keyExpression } = useContext(BrowserCtx);\n const proposal = extraItemViewData.proposal;\n\n const proposedItemDataReq = useRegisterItemData({\n itemPaths: Object.keys(proposal.items),\n });\n\n const itemData = proposedItemDataReq.value;\n\n const expressionParsed =\n new Function('objPath', 'obj', queryExpression) as (objPath: string, obj: null | RegisterItem<any> | ChangeProposal) => boolean;\n\n\n const predicate = useCallback(([objPath, obj]: [string, ChangeProposal]) => {\n const objPathInCR = itemPathInCR(objPath, extraItemViewData.proposal.id);\n return (\n expressionParsed(objPath, itemData[objPath])\n || expressionParsed(objPath, obj)\n || expressionParsed(objPathInCR, itemData[objPath])\n || expressionParsed(objPathInCR, obj)\n );\n }, [queryExpression, itemData, extraItemViewData.proposal.id]);\n\n const matchingItemIDs = useMemo(() => {\n const keyExpressionParsed = keyExpression\n ? new Function('obj', `return ${keyExpression}`) as (obj: RegisterItem<any>) => any\n : null;\n\n const matchingItems = Object.entries(proposal.items).filter(predicate);\n\n const matchingItemsWithKeys = keyExpressionParsed && !proposedItemDataReq.isUpdating\n ? matchingItems.map(([p, ]) => {\n try {\n return [p, keyExpressionParsed(itemData[p]!)];\n } catch (e) {\n console.debug(\"Failed to run key expression\", keyExpression, p, itemData[p], e);\n return [p, p];\n }\n })\n : matchingItems.map(([p, ]) => [p, p]);\n\n matchingItemsWithKeys.sort((pair1, pair2) =>\n typeof pair1[1] === 'string'\n ? pair1[1].localeCompare(pair2[1])\n : typeof pair1[1] === 'number'\n ? pair1[1] - pair2[1]\n : 0);\n\n return matchingItemsWithKeys.map(([p, ]) => p);\n }, [keyExpression, itemData, predicate, proposal.items]);\n\n const extraData: ProposalListData = useMemo((() => ({\n extraItemViewData: { proposal, itemData },\n selectedItemPath,\n })), [selectedItemPath, proposal, itemData]);\n\n const getListData = useCallback(function _getListData(): ListData<ProposalListData> | null {\n return {\n items: matchingItemIDs,\n selectedItem: selectedItemPath,\n selectItem: onSelectItem,\n openItem: onOpenItem,\n itemHeight: 32,\n padding: 0,\n extraData,\n };\n }, [matchingItemIDs.join(','), extraData, onOpenItem, onSelectItem]);\n\n return <List\n className={className}\n getListData={getListData}\n />;\n});\n\n\nexport default ProposalSearchResultList;\n"]}
|
|
@@ -53,7 +53,7 @@ const RegisterHome2 = function () {
|
|
|
53
53
|
__html: (_b = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.contentSummary) !== null && _b !== void 0 ? _b : "There is no content summary of this registry yet."
|
|
54
54
|
}
|
|
55
55
|
}), (0, _react2.jsx)(_core.Button, {
|
|
56
|
-
css: (0, _react2.css)`vertical-align: baseline
|
|
56
|
+
css: (0, _react2.css)`vertical-align: baseline; margin-top: .5em;`,
|
|
57
57
|
onClick: () => spawnTab(_protocolRegistry.Protocols.REGISTER_META)
|
|
58
58
|
}, "View register metadata")),
|
|
59
59
|
zeroResultsView: (0, _react2.jsx)(_core.NonIdealState, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome2/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,aAAa,GAAsD;;IACvE,MAAM,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACxD,OAAO,CACL,IAAC,qBAAqB,IAAC,KAAK,EAAE;2BAAc,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,mCAAI,eAAe,CAAI;QACvF,IAAC,IAAI,IAAC,GAAG,EAAE,GAAG,CAAA,qIAAqI;YACjJ,mCAEI;YACJ,IAAC,MAAM,IACL,GAAG,EAAE,GAAG,CAAA,4BAA4B;gBACpC,iFAAiF;gBACjF,iBAAiB,EAAE,EAAE,EACrB,SAAS,EAAC,oBAAoB,EAC9B,WAAW,EAAE;oBACX,aAAK,uBAAuB,EAAE,EAAE,MAAM,EACpC,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,cAAc,mCAC7B,mDAAmD;yBACvD,GAAI;oBACL,IAAC,MAAM,IACH,GAAG,EAAE,GAAG,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome2/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAE1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,MAAM,aAAa,GAAsD;;IACvE,MAAM,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACxD,OAAO,CACL,IAAC,qBAAqB,IAAC,KAAK,EAAE;2BAAc,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,IAAI,mCAAI,eAAe,CAAI;QACvF,IAAC,IAAI,IAAC,GAAG,EAAE,GAAG,CAAA,qIAAqI;YACjJ,mCAEI;YACJ,IAAC,MAAM,IACL,GAAG,EAAE,GAAG,CAAA,4BAA4B;gBACpC,iFAAiF;gBACjF,iBAAiB,EAAE,EAAE,EACrB,SAAS,EAAC,oBAAoB,EAC9B,WAAW,EAAE;oBACX,aAAK,uBAAuB,EAAE,EAAE,MAAM,EACpC,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,cAAc,mCAC7B,mDAAmD;yBACvD,GAAI;oBACL,IAAC,MAAM,IACH,GAAG,EAAE,GAAG,CAAA,6CAA6C,EACrD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,6BAE3C,CACR,EACH,eAAe,EACb,IAAC,aAAa,IACZ,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,2BAA2B,GACjC,GAEJ,CACG,CACe,CACzB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { NonIdealState, Button, Card } from '@blueprintjs/core';\n\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\n\nimport { TabContentsWithHeader } from '../../util';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport Search from '../../sidebar/Search';\nimport { Protocols } from '../../protocolRegistry';\n\n\nconst RegisterHome2: React.VoidFunctionComponent<Record<never, never>> = function () {\n const { registerMetadata } = useContext(BrowserCtx);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n return (\n <TabContentsWithHeader title={<>Welcome to {registerMetadata?.name ?? 'this register'}</>}>\n <Card css={css`flex: 1; box-shadow: none !important; position: absolute; border-radius: 0; display: flex; flex-flow: column nowrap; padding: 10px;`}>\n <p>\n Search all items:\n </p>\n <Search\n css={css`flex: 1; overflow: hidden;`}\n //style={{ height: '100vh', width: '50vw', minWidth: '500px', maxWidth: '90vw' }}\n availableClassIDs={[]}\n stateName=\"item-search-global\"\n initialView={<>\n <div dangerouslySetInnerHTML={{ __html:\n registerMetadata?.contentSummary\n ?? \"There is no content summary of this registry yet.\"\n }} />\n <Button\n css={css`vertical-align: baseline; margin-top: .5em;`}\n onClick={() => spawnTab(Protocols.REGISTER_META)}>\n View register metadata\n </Button>\n </>}\n zeroResultsView={\n <NonIdealState\n icon=\"clean\"\n title=\"No results matching query\"\n />}\n //onOpenItem={onChooseItem ? handleOpenItem : undefined}\n />\n </Card>\n </TabContentsWithHeader>\n );\n};\n\nexport default RegisterHome2;\n"]}
|
|
@@ -538,6 +538,23 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
538
538
|
// (makes sense because the user *is* technically viewing a proposal then).
|
|
539
539
|
|
|
540
540
|
const windowTitle = activeCR && (!globallyActiveCRID || activeCR.id !== globallyActiveCRID || activeCR.items[itemPath]) ? `Proposal ${(0, _util2.maybeEllipsizeString)(activeCR.justification, 20)}…` : `${(_f = itemClass.meta.title) !== null && _f !== void 0 ? _f : 'register item'} #${item.id}`;
|
|
541
|
+
const detailsDivRef = (0, _react.useRef)(null);
|
|
542
|
+
(0, _react.useLayoutEffect)(() => {
|
|
543
|
+
if ((itemBefore === null || itemBefore === void 0 ? void 0 : itemBefore.data) && detailsDivRef.current) {
|
|
544
|
+
//console.debug("observing", detailsDivRef.current, observer, itemBefore.data);
|
|
545
|
+
OBSERVER.observe(detailsDivRef.current, {
|
|
546
|
+
attributeFilter: ['value'],
|
|
547
|
+
attributes: true,
|
|
548
|
+
subtree: true,
|
|
549
|
+
childList: true
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
return function cleanUp() {
|
|
554
|
+
//console.debug("disconnecting observer");
|
|
555
|
+
OBSERVER.disconnect();
|
|
556
|
+
};
|
|
557
|
+
}, [detailsDivRef.current, itemBefore === null || itemBefore === void 0 ? void 0 : itemBefore.data]);
|
|
541
558
|
return (0, _react2.jsx)(_util2.TabContentsWithHeader, {
|
|
542
559
|
smallTitle: compactHeader,
|
|
543
560
|
title: (0, _react2.jsx)(ListItemView, {
|
|
@@ -552,7 +569,11 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
552
569
|
isOpen: historyDrawerOpenState,
|
|
553
570
|
onClose: () => setHistoryDrawerOpenState(false),
|
|
554
571
|
itemPath: itemPath
|
|
555
|
-
}),
|
|
572
|
+
}), (0, _react2.jsx)("div", {
|
|
573
|
+
id: "detailsDiv",
|
|
574
|
+
ref: detailsDivRef,
|
|
575
|
+
"data-observer-root": "true"
|
|
576
|
+
}, details)));
|
|
556
577
|
});
|
|
557
578
|
exports.ItemDetail = ItemDetail;
|
|
558
579
|
|
|
@@ -585,4 +606,63 @@ var _default = {
|
|
|
585
606
|
main: MaybeItemDetail,
|
|
586
607
|
title: ItemTitle
|
|
587
608
|
};
|
|
588
|
-
exports.default = _default;
|
|
609
|
+
exports.default = _default;
|
|
610
|
+
const CHANGED_ITEM_HIGHLIGHT_MS = 1000;
|
|
611
|
+
const OBSERVER = new MutationObserver(mutationList => {
|
|
612
|
+
const changed = [];
|
|
613
|
+
|
|
614
|
+
function maybeAddChanged(el, changeType) {
|
|
615
|
+
var _a;
|
|
616
|
+
|
|
617
|
+
if (!((_a = el.parentElement) === null || _a === void 0 ? void 0 : _a.getAttribute('data-observer-root'))) {
|
|
618
|
+
changed.push([el, changeType]);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
mutationList.forEach(mutation => {
|
|
623
|
+
switch (mutation.type) {
|
|
624
|
+
case 'childList':
|
|
625
|
+
mutation.addedNodes.forEach(node => {
|
|
626
|
+
maybeAddChanged(node, 'added');
|
|
627
|
+
}); //mutation.removedNodes.forEach((node) => {
|
|
628
|
+
// //changedNodes.push([node as HTMLElement, 'removed']);
|
|
629
|
+
// console.log('node removed', node);
|
|
630
|
+
//});
|
|
631
|
+
|
|
632
|
+
break;
|
|
633
|
+
|
|
634
|
+
case 'attributes':
|
|
635
|
+
maybeAddChanged(mutation.target, 'changed');
|
|
636
|
+
break;
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
const nodesWithBackground = [];
|
|
640
|
+
|
|
641
|
+
for (const [_el, change] of changed) {
|
|
642
|
+
// FIXME: Walk parent elements until one that actually exists?
|
|
643
|
+
const el = change === 'removed' ? _el.parentElement : _el;
|
|
644
|
+
nodesWithBackground.push([el, el.style.transition, el.style.backgroundColor, el.style.color]);
|
|
645
|
+
el.style.transition = 'none';
|
|
646
|
+
el.style.color = 'white';
|
|
647
|
+
|
|
648
|
+
if (change === 'removed') {
|
|
649
|
+
el.style.backgroundColor = _core.Colors.RED2;
|
|
650
|
+
} else {
|
|
651
|
+
el.style.backgroundColor = change === 'added' ? _core.Colors.GREEN2 : _core.Colors.INDIGO2;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
setTimeout(() => {
|
|
656
|
+
for (const [el,, bgc, tc] of nodesWithBackground) {
|
|
657
|
+
el.style.transition = 'background-color linear 1s, color linear 1s';
|
|
658
|
+
el.style.backgroundColor = bgc;
|
|
659
|
+
el.style.color = tc;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
setTimeout(() => {
|
|
663
|
+
for (const [el, tr] of nodesWithBackground) {
|
|
664
|
+
el.style.transition = tr;
|
|
665
|
+
}
|
|
666
|
+
}, CHANGED_ITEM_HIGHLIGHT_MS);
|
|
667
|
+
}, 1);
|
|
668
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterItem/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useState, useMemo, memo, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n Button, type ButtonProps,\n Card,\n Classes,\n NonIdealState,\n UL,\n Colors,\n} from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { normalizeObject } from '@riboseinc/paneron-extension-kit/util';\nimport type { HelpTooltipProps } from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport useSingleRegisterItemData from '../../hooks/useSingleRegisterItemData';\nimport useItemClassConfig from '../../hooks/useItemClassConfig';\nimport { Protocols } from '../../protocolRegistry';\nimport {\n type ChangeProposal,\n type Supersession,\n} from '../../../proposals/types';\nimport {\n type InternalItemReference,\n type ItemClassConfiguration,\n type RegisterItem,\n isRegisterItem,\n DUMMY_REF,\n} from '../../../types';\nimport { InlineDiffGeneric } from '../../diffing/InlineDiff';\nimport type { Drafted } from '../../../proposals/types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport {\n RegisterHelmet as Helmet,\n maybeEllipsizeString,\n TabContentsWithHeader,\n type TabContentsWithHeaderProps,\n type ActionProps,\n} from '../../util';\nimport { proposalToTagProps } from '../../../proposals/ProposalType';\nimport ProposalHistoryDrawer from '../../../proposals/HistoryDrawer';\nimport { useItemRef, itemRefToItemPath, crIDToCRPath, getCRIDFromProposedItemPath } from '../../itemPathUtils';\nimport { updateCRObjectChangeset, } from '../../../proposals/objectChangeset';\nimport { ChangeRequestContext } from '../../../proposals/ChangeRequestContext';\nimport { RelatedItems } from './RelatedItems';\n\n\n/**\n * Main register item view.\n *\n * NOTE: while generally intended as tab content handler,\n * is also reused within change request view.\n */\nconst MaybeItemDetail: React.VoidFunctionComponent<{ uri: string }> =\nmemo(function ({ uri }) {\n //const { value: itemData } = useSingleRegisterItemData(ref);\n const { jumpTo, subregisters, useRegisterItemData } = useContext(BrowserCtx);\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n const ref = useItemRef(subregisters !== undefined, uri);\n const itemClass = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n\n const itemClassID = itemClass?.meta?.id;\n const itemRef = ref ?? DUMMY_REF;\n const { itemID, subregisterID } = itemRef;\n\n const _itemPath = `${itemClassID ?? 'NONEXISTENT_CLASS'}/${itemID}.yaml`;\n const itemPath = subregisterID\n ? `/subregisters/${subregisterID}/${_itemPath}`\n : `/${_itemPath}`;\n const itemRequest = useMemo(() => ({\n itemPaths: [itemPath],\n }), [itemPath]);\n const itemResponse = useRegisterItemData(itemRequest);\n const itemData = itemResponse.value[itemPath];\n const previousItemResponse = useRegisterItemData({\n itemPaths: [itemPath],\n ignoreActiveCR: true,\n });\n const itemDataBefore = previousItemResponse.value[itemPath] ?? undefined;\n\n if (!itemClass) {\n return <NonIdealState\n icon=\"heart-broken\"\n title=\"Unable to show item\"\n description={`View for ${ref?.itemID ?? uri} cannot be retrieved from item class configuration`}\n />;\n\n } else if (isRegisterItem(itemData)) {\n return <ItemDetail\n item={itemData}\n itemBefore={itemDataBefore}\n itemRef={itemRef}\n itemClass={itemClass}\n />;\n\n } else if (itemResponse.isUpdating) {\n return <div className={Classes.SKELETON}>\n Loading\n </div>;\n\n } else {\n // Opened using URI that points within a proposal.\n // The item may or may not have been accepted.\n const inCRWithID = getCRIDFromProposedItemPath(uri);\n if (inCRWithID !== null && activeCR?.id !== inCRWithID) {\n return <NonIdealState\n icon=\"help\"\n title=\"This item does not exist…\"\n description={\n <>\n …but it might be proposed.\n <br />\n {jumpTo\n ? <Button\n css={css`margin: 10px;`}\n intent=\"primary\"\n onClick={() => jumpTo?.(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(inCRWithID)}`)}>\n Go to proposal\n </Button>\n : null}\n </>\n }\n />;\n } else {\n const desc = itemData === null || itemData === undefined\n ? \"does not exist or could not be deserialized\"\n : \"may use unexpected data format\";\n return <NonIdealState\n icon=\"heart-broken\"\n title=\"Unable to show item\"\n description={`Item at ${itemPath} ${desc}`}\n />;\n }\n }\n});\n\nconst EMPTY_OBJECT = {} as const;\n\n\nexport const ItemDetail: React.VoidFunctionComponent<{\n item: RegisterItem\n itemBefore?: RegisterItem\n itemRef: InternalItemReference\n itemClass: ItemClassConfiguration<any>\n className?: string\n compactHeader?: boolean\n}> = memo(function ({ item, itemBefore, itemRef, itemClass, className, compactHeader }) {\n const { subregisters, useRegisterItemData, activeChangeRequestID: globallyActiveCRID } = useContext(BrowserCtx);\n\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n const { updateObjects, makeRandomID, performOperation, isBusy } = useContext(DatasetContext);\n\n const [ editedItemData, setEditedItemData ] = useState<RegisterItem[\"data\"] | null>(null);\n const itemDataHasChanges = JSON.stringify(editedItemData) !== JSON.stringify(item.data);\n\n const [ isEditingProposal, setIsEditingProposal ] = useState(false);\n\n //const [ diffMode, setDiffMode ] = useState<boolean>(false);\n // TODO: Implement diff mode\n const diffMode = false;\n\n const itemPath = itemRefToItemPath(itemRef);\n\n /** Proposal for the current item. */\n const proposal = ((activeCR && activeCR.items[itemPath])\n ? activeCR.items[itemPath]\n : null) ?? null;\n\n const [ preferredComparison, setPreferredComparison ] =\n useState<'prior' | 'diff' | null>(null);\n const canCompare = proposal?.type === 'clarification' && itemBefore;\n const showDiff = preferredComparison === 'diff' && canCompare;\n const showBefore = preferredComparison === 'prior' && canCompare;\n\n // Gather views\n const ListItemView = itemClass.views.listItemView;\n let details: JSX.Element;\n if (editedItemData !== null && activeCRIsEditable) {\n const EditView = itemClass.views.editView;\n details = (\n <EditView\n itemData={editedItemData}\n itemRef={itemRef}\n onChange={!isBusy ? setEditedItemData : undefined}\n // TODO: make importing context from registry-kit work in new-style extension\n useRegisterItemData={useRegisterItemData}\n />\n );\n } else if (showDiff) {\n details = <InlineDiffGeneric\n item1={itemBefore ?? EMPTY_OBJECT}\n item2={item}\n css={css`\n position: absolute; inset: 0; padding: 10px; overflow: auto;\n background-color: white;\n .bp4-dark & {\n background-color: ${Colors.DARK_GRAY2};\n }\n `}\n className={`${Classes.ELEVATION_2} ${Classes.RUNNING_TEXT}`}\n />\n } else {\n const DetailView = itemClass.views.detailView ?? itemClass.views.editView;\n details = (\n <DetailView\n itemRef={itemRef}\n itemData={showBefore ? itemBefore.data : item.data}\n // TODO: make importing context from registry-kit work in new-style extension\n useRegisterItemData={useRegisterItemData}\n />\n );\n }\n\n const proposedSupersedingItemRefs =\n proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'\n ? proposal.supersedingItemIDs.\n map(id => ({\n itemID: id,\n // Superseding items are always of the same class\n classID: itemClass.meta.id,\n // Superseding items are always in the same subregister\n subregisterID: itemRef.subregisterID,\n }))\n : undefined;\n\n const supersedingItemRefs = proposedSupersedingItemRefs ?? item.supersededBy ?? [];\n const supersedingItemRefsCacheKey = supersedingItemRefs.map(i => JSON.stringify(i)).toString();\n\n // It’s superseded (whether in current proposal or not)\n const isSuperseded = /* item.status === 'superseded'; nuh-uh */ supersedingItemRefs.length > 0;\n // Item is valid, proposal is editable, and no change to this item is proposed yet\n const canBeSuperseded = (activeCRIsEditable && !proposal && !editedItemData && item.status === 'valid');\n // This item is being superseded in active proposal\n // XXX: May be redundant with `isSuperseded`?\n const isBeingSuperseded = (proposal?.type === 'amendment' && proposal.amendmentType === 'supersession');\n\n // Editing is possible for additions and clarifications.\n //const itemDataCanBeEdited = activeCRIsEditable && proposal && proposal.type !== 'amendment';\n\n const handleClearProposal = () => performProposalOperation('clearing draft proposal', null);\n const handleRetire = () => performProposalOperation('proposing retirement of an item', {\n type: 'amendment',\n amendmentType: 'retirement',\n });\n const handleInvalidate = () => performProposalOperation('proposing invalidation', {\n type: 'amendment',\n amendmentType: 'invalidation',\n });\n const handleSupersedeWith = (items: string[]) => performProposalOperation('proposing supersession', {\n type: 'amendment',\n amendmentType: 'supersession',\n supersedingItemIDs: items,\n });\n const handleClarify = async () => {\n await performProposalOperation('proposing clarification', {\n type: 'clarification',\n });\n setEditedItemData(null); // XXX: Redundant?\n };\n const handleEditAddition = async () => {\n await performProposalOperation('editing proposed addition', {\n type: 'addition',\n });\n setEditedItemData(null); // XXX: Redundant?\n };\n\n async function performProposalOperation(summary: string, proposal: ChangeProposal | null) {\n return await performOperation(summary, handleSetProposal)(summary, proposal);\n }\n\n const handleSetProposal = useCallback(async function _handleSetProposal(\n summary: string,\n proposal: ChangeProposal | null,\n ): Promise<void> {\n if (!activeCRIsEditable || !updateObjects || !isRegisterItem(item)) {\n throw new Error(\"Proposal isn’t editable\")\n }\n if (proposal && proposal?.type !== 'amendment' && !editedItemData) {\n throw new Error(\"Missing item data\");\n }\n await updateObjects({\n commitMessage: `${summary} for ${itemPath}`,\n objectChangeset: updateCRObjectChangeset(\n // TODO: We are sure it’s editable already, but casting should be avoided\n activeCR as any,\n { [itemPath]: proposal },\n ((proposal && proposal?.type !== 'amendment') && editedItemData)\n ? { [itemPath]: { ...item, data: editedItemData } }\n : {},\n ),\n // We need this because updateCRObjectChangeset\n // omits oldValue for item data payloads.\n _dangerouslySkipValidation: true,\n });\n setEditedItemData(null);\n setIsEditingProposal(false);\n }, [\n editedItemData,\n activeCRIsEditable,\n itemPath,\n item,\n activeCR,\n updateObjects,\n ]);\n\n // TODO: Very similar to `handleAdd()` in Browse sidebar menu; refactor?\n const handleProposeLikeThis = useCallback(async function _handleProposeLikeThis(): Promise<void> {\n if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {\n throw new Error(\"Unable to create item: likely current proposal is not editable or dataset is read-only\");\n }\n const { classID, subregisterID } = itemRef;\n const itemID = await makeRandomID();\n const newRef = { classID, subregisterID, itemID };\n const newItem: RegisterItem<any> = {\n id: itemID,\n dateAccepted: new Date(),\n status: 'valid',\n data: { ...item.data },\n };\n if (isRegisterItem(newItem)) {\n const newPath = itemRefToItemPath(newRef);\n await updateObjects({\n commitMessage: `clone ${itemRef.itemID} to propose a new item`,\n objectChangeset: updateCRObjectChangeset(\n activeCR as Drafted,\n { [newPath]: { type: 'addition' } },\n { [newPath]: newItem },\n ),\n _dangerouslySkipValidation: true,\n });\n } else {\n throw new Error(\"Newly created item did not pass validation (this is likely a bug in RegistryKit)\");\n }\n }, [\n updateObjects,\n activeCRIsEditable,\n itemPath,\n activeCR?.id,\n activeCR?.state,\n Object.entries(activeCR?.items ?? {}).flat().map(i => JSON.stringify(i)).toString(),\n item ? JSON.stringify(normalizeObject(item)) : item,\n ]);\n\n const supersedingItemsTooltip: HelpTooltipProps = useMemo(() => ({\n icon: 'info-sign',\n content: \n <RelatedItems\n css={css`background-color: ${Colors.LIGHT_GRAY3}; padding: 5px;`}\n availableClassIDs={[itemClass.meta.id]}\n itemRefs={supersedingItemRefs}\n />,\n }), [supersedingItemRefsCacheKey, itemClass.meta.id]);\n\n const classification: TabContentsWithHeaderProps['classification'] = useMemo(() => {\n const classification: TabContentsWithHeaderProps['classification'] = [{\n icon: 'document',\n children: <>\n Register item\n {itemRef.subregisterID\n ? <span title=\"Subregister\"> in {subregisters?.[itemRef.subregisterID]?.title ?? itemRef.subregisterID}</span>\n : null}\n </>,\n tooltip: {\n icon: 'info-sign',\n content: <>\n <UL css={css`margin: 0;`}>\n <li>Class ID: {itemClass.meta.id}</li>\n <li>Subregister ID: {itemRef.subregisterID ?? 'N/A'}</li>\n <li>UUID: {itemRef.itemID}</li>\n </UL>\n </>,\n },\n }, {\n children: itemClass.meta.title,\n tooltip: {\n icon: 'info-sign',\n content: <>\n {itemClass.meta.description ?? \"No description is provided for this register item class.\"}\n </>,\n },\n }];\n\n classification.push({\n children: item.status,\n intent: item.status === 'valid'\n ? 'success'\n : undefined,\n icon: item.status === 'invalid'\n ? 'ban-circle'\n : item.status === 'retired'\n ? 'warning-sign'\n : 'tick',\n tooltip: isSuperseded\n ? supersedingItemsTooltip\n : undefined,\n });\n\n if (proposal) {\n const tagProps = proposalToTagProps(proposal);\n classification.push({\n ...tagProps,\n children: <>{tagProps.children} proposed</>,\n icon: 'lightbulb',\n minimal: false,\n tooltip: canBeSuperseded || isBeingSuperseded\n ? supersedingItemsTooltip\n : undefined,\n });\n }\n\n return classification;\n }, [\n proposal?.type,\n itemClass.meta.id,\n item.status,\n isSuperseded, canBeSuperseded, isBeingSuperseded,\n supersedingItemsTooltip,\n ]);\n\n const [ historyDrawerOpenState, setHistoryDrawerOpenState ] = useState(false);\n\n const actions = useMemo(() => {\n const actions: TabContentsWithHeaderProps['actions'] = [{\n children: \"View history\",\n active: historyDrawerOpenState,\n icon: 'history',\n disabled: isBusy,\n onClick: () => setHistoryDrawerOpenState(true),\n }];\n\n const isEditingItemData = editedItemData !== null;\n const itemHasProposal = proposal !== null;\n //const canPropose = activeCRIsEditable && item.status === 'valid' && !isBusy;\n const itemIsProposable = item.status === 'valid';\n\n if (activeCRIsEditable) {\n actions.push({\n children: \"Propose another item like this\",\n icon: 'duplicate',\n disabled: isBusy,\n onClick: performOperation(\n 'adding duplicate item to current propposal',\n handleProposeLikeThis),\n //title=\"Propose a new item in current proposal, using this item as template.\"\n });\n\n const saveEditedItemDataButton: ButtonProps = {\n intent: 'primary',\n disabled: isBusy || !itemDataHasChanges,\n onClick: (!proposal || proposal.type === 'clarification')\n ? handleClarify\n : handleEditAddition,\n children: \"Save changes\",\n };\n\n const supersedingItemRefs =\n proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'\n ? proposal.supersedingItemIDs.\n map(id => ({\n itemID: id,\n // Superseding items are always of the same class\n classID: itemClass.meta.id,\n // Superseding items are always in the same subregister\n subregisterID: itemRef.subregisterID,\n }))\n : [];\n const supersedingItems = (\n <RelatedItems\n availableClassIDs={[itemClass.meta.id]}\n itemRefs={supersedingItemRefs}\n onChange={!isBusy\n ? (items) => items.length > 0\n ? handleSupersedeWith(items.map(ref => ref.itemID))\n : handleClearProposal()\n : undefined}\n />\n );\n\n if (itemIsProposable) {\n if (itemHasProposal) {\n const proposeBtn: ButtonProps = {\n children: `Edit ${proposal.type === 'amendment' ? proposal.amendmentType : proposal.type} proposal for this item`,\n icon: 'edit',\n active: isEditingProposal,\n disabled: isBusy,\n onClick: () => {\n if (isEditingProposal) {\n setIsEditingProposal(false);\n setEditedItemData(null);\n if (proposal && proposal.type !== 'amendment') {\n }\n } else {\n setIsEditingProposal(true);\n if (proposal && proposal.type !== 'amendment') {\n setEditedItemData(item.data);\n }\n }\n },\n };\n if (isEditingProposal) {\n const editActions: ActionProps[] = [{\n disabled: isBusy || (itemDataHasChanges && proposal.type !== 'amendment'),\n onClick: handleClearProposal,\n icon: 'trash',\n children: \"Remove\",\n tooltip: [\n `NOTE: Discarding this proposal `,\n `will discard ${proposal.type === 'addition' ? \"new\" : \"changes to\"} item’s data `,\n 'you provided as part of the proposal.',\n ].join(''),\n intent: proposal.type !== 'amendment' ? 'danger' : 'warning',\n }];\n if (isEditingItemData) {\n editActions.push(saveEditedItemDataButton);\n } else if (proposal.type === 'amendment' && proposal.amendmentType === 'supersession') {\n editActions.push({\n disabled: isBusy,\n children: \"Specify superseding items\",\n popup: <div css={css`padding: 10px;`}>{supersedingItems}</div>,\n });\n }\n actions.push([proposeBtn, ...editActions]);\n } else {\n actions.push(proposeBtn);\n if (canCompare) {\n actions.push([{\n disabled: isBusy,\n children: \"Prior version\",\n active: preferredComparison === 'prior',\n onClick: preferredComparison === 'prior'\n ? () => setPreferredComparison(null)\n : () => setPreferredComparison('prior'),\n }, {\n disabled: isBusy,\n children: \"Diff\",\n active: preferredComparison === 'diff',\n onClick: preferredComparison === 'diff'\n ? () => setPreferredComparison(null)\n : () => setPreferredComparison('diff'),\n }]);\n }\n }\n } else {\n const proposeBtn: ButtonProps = {\n children: \"Propose to change this item\",\n icon: 'lightbulb',\n active: isEditingProposal,\n disabled: isBusy,\n onClick: () => setIsEditingProposal(v => !v),\n };\n if (isEditingProposal) {\n const proposalGroup = [proposeBtn, {\n disabled: isBusy || itemHasProposal,\n onClick: handleRetire,\n children: \"Retire\",\n }, {\n disabled: isBusy || itemHasProposal,\n onClick: handleInvalidate,\n children: \"Invalidate\",\n }, {\n disabled: isBusy || itemHasProposal || isEditingItemData,\n popup: supersedingItems,\n children: \"Supersede\",\n }, {\n disabled: isBusy || diffMode,\n active: isEditingItemData,\n onClick: () => setEditedItemData(d => d === null ? item.data : null),\n children: \"Clarify\",\n }];\n if (isEditingItemData && itemDataHasChanges) {\n proposalGroup.push(saveEditedItemDataButton);\n }\n actions.push(proposalGroup);\n } else {\n actions.push(proposeBtn);\n }\n }\n }\n }\n // TODO: diff view\n\n return actions;\n }, [\n isBusy,\n itemClass.meta.id,\n\n proposal === null,\n proposal?.type,\n (proposal as Supersession)?.supersedingItemIDs?.toString(),\n\n activeCRIsEditable,\n\n editedItemData === null,\n itemDataHasChanges,\n\n isEditingProposal,\n performOperation, handleSetProposal,\n historyDrawerOpenState,\n\n canCompare, preferredComparison, setPreferredComparison,\n ]);\n\n // If there’s a CR context without active CR,\n // or active CR isn’t the same as the one in CR context,\n // then we can assume that the item is shown in proposal window\n // and we’d set window title to proposal’s title rather than item’s.\n // If there’s a CR context and active CR and they’re the same\n // then it *could* be that the item is shown in its own tab;\n // we will render proposal’s title if the item appears in the change request\n // (makes sense because the user *is* technically viewing a proposal then).\n const windowTitle: string = (\n activeCR && (\n !globallyActiveCRID\n || activeCR.id !== globallyActiveCRID\n || activeCR.items[itemPath]\n )\n ) ? `Proposal ${maybeEllipsizeString(activeCR.justification, 20)}…`\n : `${itemClass.meta.title ?? 'register item'} #${item.id}`;\n\n return (\n <TabContentsWithHeader\n smallTitle={compactHeader}\n title={<ListItemView itemRef={itemRef} itemData={item.data} />}\n classification={classification}\n actions={actions}>\n <Card css={css`position: absolute; border-radius: 0; inset: ${compactHeader ? '0' : '10px'}; overflow-y: auto;`}>\n <Helmet><title>{windowTitle}</title></Helmet>\n <ProposalHistoryDrawer\n isOpen={historyDrawerOpenState}\n onClose={() => setHistoryDrawerOpenState(false)}\n itemPath={itemPath}\n />\n {details}\n </Card>\n </TabContentsWithHeader>\n );\n});\n\n\nconst ItemTitle: React.FC<{ uri: string }> = function ({ uri }) {\n const { subregisters } = useContext(BrowserCtx);\n const ref = useItemRef(subregisters !== undefined, uri);\n const clsConfig = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n const { value: itemData } = useSingleRegisterItemData(ref);\n const fallbackView = useCallback((() => <>{ref?.itemID ?? uri}</>), [uri]);\n const View = itemData\n ? (clsConfig?.views.listItemView ?? fallbackView)\n : fallbackView;\n return <View\n itemRef={ref ?? DUMMY_REF}\n itemData={itemData}\n />;\n};\n\n\nexport default {\n main: MaybeItemDetail,\n title: ItemTitle,\n} as const;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterItem/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useState, useMemo, useRef, useLayoutEffect, memo, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n Button, type ButtonProps,\n Card,\n Classes,\n NonIdealState,\n UL,\n Colors,\n} from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { normalizeObject } from '@riboseinc/paneron-extension-kit/util';\nimport type { HelpTooltipProps } from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport useSingleRegisterItemData from '../../hooks/useSingleRegisterItemData';\nimport useItemClassConfig from '../../hooks/useItemClassConfig';\nimport { Protocols } from '../../protocolRegistry';\nimport {\n type ChangeProposal,\n type Supersession,\n} from '../../../proposals/types';\nimport {\n type InternalItemReference,\n type ItemClassConfiguration,\n type RegisterItem,\n isRegisterItem,\n DUMMY_REF,\n} from '../../../types';\nimport { InlineDiffGeneric } from '../../diffing/InlineDiff';\nimport type { Drafted } from '../../../proposals/types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport {\n RegisterHelmet as Helmet,\n maybeEllipsizeString,\n TabContentsWithHeader,\n type TabContentsWithHeaderProps,\n type ActionProps,\n} from '../../util';\nimport { proposalToTagProps } from '../../../proposals/ProposalType';\nimport ProposalHistoryDrawer from '../../../proposals/HistoryDrawer';\nimport { useItemRef, itemRefToItemPath, crIDToCRPath, getCRIDFromProposedItemPath } from '../../itemPathUtils';\nimport { updateCRObjectChangeset, } from '../../../proposals/objectChangeset';\nimport { ChangeRequestContext } from '../../../proposals/ChangeRequestContext';\nimport { RelatedItems } from './RelatedItems';\n\n\n/**\n * Main register item view.\n *\n * NOTE: while generally intended as tab content handler,\n * is also reused within change request view.\n */\nconst MaybeItemDetail: React.VoidFunctionComponent<{ uri: string }> =\nmemo(function ({ uri }) {\n //const { value: itemData } = useSingleRegisterItemData(ref);\n const { jumpTo, subregisters, useRegisterItemData } = useContext(BrowserCtx);\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n const ref = useItemRef(subregisters !== undefined, uri);\n const itemClass = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n\n const itemClassID = itemClass?.meta?.id;\n const itemRef = ref ?? DUMMY_REF;\n const { itemID, subregisterID } = itemRef;\n\n const _itemPath = `${itemClassID ?? 'NONEXISTENT_CLASS'}/${itemID}.yaml`;\n const itemPath = subregisterID\n ? `/subregisters/${subregisterID}/${_itemPath}`\n : `/${_itemPath}`;\n const itemRequest = useMemo(() => ({\n itemPaths: [itemPath],\n }), [itemPath]);\n const itemResponse = useRegisterItemData(itemRequest);\n const itemData = itemResponse.value[itemPath];\n const previousItemResponse = useRegisterItemData({\n itemPaths: [itemPath],\n ignoreActiveCR: true,\n });\n const itemDataBefore = previousItemResponse.value[itemPath] ?? undefined;\n\n if (!itemClass) {\n return <NonIdealState\n icon=\"heart-broken\"\n title=\"Unable to show item\"\n description={`View for ${ref?.itemID ?? uri} cannot be retrieved from item class configuration`}\n />;\n\n } else if (isRegisterItem(itemData)) {\n return <ItemDetail\n item={itemData}\n itemBefore={itemDataBefore}\n itemRef={itemRef}\n itemClass={itemClass}\n />;\n\n } else if (itemResponse.isUpdating) {\n return <div className={Classes.SKELETON}>\n Loading\n </div>;\n\n } else {\n // Opened using URI that points within a proposal.\n // The item may or may not have been accepted.\n const inCRWithID = getCRIDFromProposedItemPath(uri);\n if (inCRWithID !== null && activeCR?.id !== inCRWithID) {\n return <NonIdealState\n icon=\"help\"\n title=\"This item does not exist…\"\n description={\n <>\n …but it might be proposed.\n <br />\n {jumpTo\n ? <Button\n css={css`margin: 10px;`}\n intent=\"primary\"\n onClick={() => jumpTo?.(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(inCRWithID)}`)}>\n Go to proposal\n </Button>\n : null}\n </>\n }\n />;\n } else {\n const desc = itemData === null || itemData === undefined\n ? \"does not exist or could not be deserialized\"\n : \"may use unexpected data format\";\n return <NonIdealState\n icon=\"heart-broken\"\n title=\"Unable to show item\"\n description={`Item at ${itemPath} ${desc}`}\n />;\n }\n }\n});\n\nconst EMPTY_OBJECT = {} as const;\n\n\nexport const ItemDetail: React.VoidFunctionComponent<{\n item: RegisterItem\n itemBefore?: RegisterItem\n itemRef: InternalItemReference\n itemClass: ItemClassConfiguration<any>\n className?: string\n compactHeader?: boolean\n}> = memo(function ({ item, itemBefore, itemRef, itemClass, className, compactHeader }) {\n const { subregisters, useRegisterItemData, activeChangeRequestID: globallyActiveCRID } = useContext(BrowserCtx);\n\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n const { updateObjects, makeRandomID, performOperation, isBusy } = useContext(DatasetContext);\n\n const [ editedItemData, setEditedItemData ] = useState<RegisterItem[\"data\"] | null>(null);\n const itemDataHasChanges = JSON.stringify(editedItemData) !== JSON.stringify(item.data);\n\n const [ isEditingProposal, setIsEditingProposal ] = useState(false);\n\n //const [ diffMode, setDiffMode ] = useState<boolean>(false);\n // TODO: Implement diff mode\n const diffMode = false;\n\n const itemPath = itemRefToItemPath(itemRef);\n\n /** Proposal for the current item. */\n const proposal = ((activeCR && activeCR.items[itemPath])\n ? activeCR.items[itemPath]\n : null) ?? null;\n\n const [ preferredComparison, setPreferredComparison ] =\n useState<'prior' | 'diff' | null>(null);\n const canCompare = proposal?.type === 'clarification' && itemBefore;\n const showDiff = preferredComparison === 'diff' && canCompare;\n const showBefore = preferredComparison === 'prior' && canCompare;\n\n // Gather views\n const ListItemView = itemClass.views.listItemView;\n let details: JSX.Element;\n if (editedItemData !== null && activeCRIsEditable) {\n const EditView = itemClass.views.editView;\n details = (\n <EditView\n itemData={editedItemData}\n itemRef={itemRef}\n onChange={!isBusy ? setEditedItemData : undefined}\n // TODO: make importing context from registry-kit work in new-style extension\n useRegisterItemData={useRegisterItemData}\n />\n );\n } else if (showDiff) {\n details = <InlineDiffGeneric\n item1={itemBefore ?? EMPTY_OBJECT}\n item2={item}\n css={css`\n position: absolute; inset: 0; padding: 10px; overflow: auto;\n background-color: white;\n .bp4-dark & {\n background-color: ${Colors.DARK_GRAY2};\n }\n `}\n className={`${Classes.ELEVATION_2} ${Classes.RUNNING_TEXT}`}\n />\n } else {\n const DetailView = itemClass.views.detailView ?? itemClass.views.editView;\n details = (\n <DetailView\n itemRef={itemRef}\n itemData={showBefore ? itemBefore.data : item.data}\n // TODO: make importing context from registry-kit work in new-style extension\n useRegisterItemData={useRegisterItemData}\n />\n );\n }\n\n const proposedSupersedingItemRefs =\n proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'\n ? proposal.supersedingItemIDs.\n map(id => ({\n itemID: id,\n // Superseding items are always of the same class\n classID: itemClass.meta.id,\n // Superseding items are always in the same subregister\n subregisterID: itemRef.subregisterID,\n }))\n : undefined;\n\n const supersedingItemRefs = proposedSupersedingItemRefs ?? item.supersededBy ?? [];\n const supersedingItemRefsCacheKey = supersedingItemRefs.map(i => JSON.stringify(i)).toString();\n\n // It’s superseded (whether in current proposal or not)\n const isSuperseded = /* item.status === 'superseded'; nuh-uh */ supersedingItemRefs.length > 0;\n // Item is valid, proposal is editable, and no change to this item is proposed yet\n const canBeSuperseded = (activeCRIsEditable && !proposal && !editedItemData && item.status === 'valid');\n // This item is being superseded in active proposal\n // XXX: May be redundant with `isSuperseded`?\n const isBeingSuperseded = (proposal?.type === 'amendment' && proposal.amendmentType === 'supersession');\n\n // Editing is possible for additions and clarifications.\n //const itemDataCanBeEdited = activeCRIsEditable && proposal && proposal.type !== 'amendment';\n\n const handleClearProposal = () => performProposalOperation('clearing draft proposal', null);\n const handleRetire = () => performProposalOperation('proposing retirement of an item', {\n type: 'amendment',\n amendmentType: 'retirement',\n });\n const handleInvalidate = () => performProposalOperation('proposing invalidation', {\n type: 'amendment',\n amendmentType: 'invalidation',\n });\n const handleSupersedeWith = (items: string[]) => performProposalOperation('proposing supersession', {\n type: 'amendment',\n amendmentType: 'supersession',\n supersedingItemIDs: items,\n });\n const handleClarify = async () => {\n await performProposalOperation('proposing clarification', {\n type: 'clarification',\n });\n setEditedItemData(null); // XXX: Redundant?\n };\n const handleEditAddition = async () => {\n await performProposalOperation('editing proposed addition', {\n type: 'addition',\n });\n setEditedItemData(null); // XXX: Redundant?\n };\n\n async function performProposalOperation(summary: string, proposal: ChangeProposal | null) {\n return await performOperation(summary, handleSetProposal)(summary, proposal);\n }\n\n const handleSetProposal = useCallback(async function _handleSetProposal(\n summary: string,\n proposal: ChangeProposal | null,\n ): Promise<void> {\n if (!activeCRIsEditable || !updateObjects || !isRegisterItem(item)) {\n throw new Error(\"Proposal isn’t editable\")\n }\n if (proposal && proposal?.type !== 'amendment' && !editedItemData) {\n throw new Error(\"Missing item data\");\n }\n await updateObjects({\n commitMessage: `${summary} for ${itemPath}`,\n objectChangeset: updateCRObjectChangeset(\n // TODO: We are sure it’s editable already, but casting should be avoided\n activeCR as any,\n { [itemPath]: proposal },\n ((proposal && proposal?.type !== 'amendment') && editedItemData)\n ? { [itemPath]: { ...item, data: editedItemData } }\n : {},\n ),\n // We need this because updateCRObjectChangeset\n // omits oldValue for item data payloads.\n _dangerouslySkipValidation: true,\n });\n setEditedItemData(null);\n setIsEditingProposal(false);\n }, [\n editedItemData,\n activeCRIsEditable,\n itemPath,\n item,\n activeCR,\n updateObjects,\n ]);\n\n // TODO: Very similar to `handleAdd()` in Browse sidebar menu; refactor?\n const handleProposeLikeThis = useCallback(async function _handleProposeLikeThis(): Promise<void> {\n if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {\n throw new Error(\"Unable to create item: likely current proposal is not editable or dataset is read-only\");\n }\n const { classID, subregisterID } = itemRef;\n const itemID = await makeRandomID();\n const newRef = { classID, subregisterID, itemID };\n const newItem: RegisterItem<any> = {\n id: itemID,\n dateAccepted: new Date(),\n status: 'valid',\n data: { ...item.data },\n };\n if (isRegisterItem(newItem)) {\n const newPath = itemRefToItemPath(newRef);\n await updateObjects({\n commitMessage: `clone ${itemRef.itemID} to propose a new item`,\n objectChangeset: updateCRObjectChangeset(\n activeCR as Drafted,\n { [newPath]: { type: 'addition' } },\n { [newPath]: newItem },\n ),\n _dangerouslySkipValidation: true,\n });\n } else {\n throw new Error(\"Newly created item did not pass validation (this is likely a bug in RegistryKit)\");\n }\n }, [\n updateObjects,\n activeCRIsEditable,\n itemPath,\n activeCR?.id,\n activeCR?.state,\n Object.entries(activeCR?.items ?? {}).flat().map(i => JSON.stringify(i)).toString(),\n item ? JSON.stringify(normalizeObject(item)) : item,\n ]);\n\n const supersedingItemsTooltip: HelpTooltipProps = useMemo(() => ({\n icon: 'info-sign',\n content: \n <RelatedItems\n css={css`background-color: ${Colors.LIGHT_GRAY3}; padding: 5px;`}\n availableClassIDs={[itemClass.meta.id]}\n itemRefs={supersedingItemRefs}\n />,\n }), [supersedingItemRefsCacheKey, itemClass.meta.id]);\n\n const classification: TabContentsWithHeaderProps['classification'] = useMemo(() => {\n const classification: TabContentsWithHeaderProps['classification'] = [{\n icon: 'document',\n children: <>\n Register item\n {itemRef.subregisterID\n ? <span title=\"Subregister\"> in {subregisters?.[itemRef.subregisterID]?.title ?? itemRef.subregisterID}</span>\n : null}\n </>,\n tooltip: {\n icon: 'info-sign',\n content: <>\n <UL css={css`margin: 0;`}>\n <li>Class ID: {itemClass.meta.id}</li>\n <li>Subregister ID: {itemRef.subregisterID ?? 'N/A'}</li>\n <li>UUID: {itemRef.itemID}</li>\n </UL>\n </>,\n },\n }, {\n children: itemClass.meta.title,\n tooltip: {\n icon: 'info-sign',\n content: <>\n {itemClass.meta.description ?? \"No description is provided for this register item class.\"}\n </>,\n },\n }];\n\n classification.push({\n children: item.status,\n intent: item.status === 'valid'\n ? 'success'\n : undefined,\n icon: item.status === 'invalid'\n ? 'ban-circle'\n : item.status === 'retired'\n ? 'warning-sign'\n : 'tick',\n tooltip: isSuperseded\n ? supersedingItemsTooltip\n : undefined,\n });\n\n if (proposal) {\n const tagProps = proposalToTagProps(proposal);\n classification.push({\n ...tagProps,\n children: <>{tagProps.children} proposed</>,\n icon: 'lightbulb',\n minimal: false,\n tooltip: canBeSuperseded || isBeingSuperseded\n ? supersedingItemsTooltip\n : undefined,\n });\n }\n\n return classification;\n }, [\n proposal?.type,\n itemClass.meta.id,\n item.status,\n isSuperseded, canBeSuperseded, isBeingSuperseded,\n supersedingItemsTooltip,\n ]);\n\n const [ historyDrawerOpenState, setHistoryDrawerOpenState ] = useState(false);\n\n const actions = useMemo(() => {\n const actions: TabContentsWithHeaderProps['actions'] = [{\n children: \"View history\",\n active: historyDrawerOpenState,\n icon: 'history',\n disabled: isBusy,\n onClick: () => setHistoryDrawerOpenState(true),\n }];\n\n const isEditingItemData = editedItemData !== null;\n const itemHasProposal = proposal !== null;\n //const canPropose = activeCRIsEditable && item.status === 'valid' && !isBusy;\n const itemIsProposable = item.status === 'valid';\n\n if (activeCRIsEditable) {\n actions.push({\n children: \"Propose another item like this\",\n icon: 'duplicate',\n disabled: isBusy,\n onClick: performOperation(\n 'adding duplicate item to current propposal',\n handleProposeLikeThis),\n //title=\"Propose a new item in current proposal, using this item as template.\"\n });\n\n const saveEditedItemDataButton: ButtonProps = {\n intent: 'primary',\n disabled: isBusy || !itemDataHasChanges,\n onClick: (!proposal || proposal.type === 'clarification')\n ? handleClarify\n : handleEditAddition,\n children: \"Save changes\",\n };\n\n const supersedingItemRefs =\n proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'\n ? proposal.supersedingItemIDs.\n map(id => ({\n itemID: id,\n // Superseding items are always of the same class\n classID: itemClass.meta.id,\n // Superseding items are always in the same subregister\n subregisterID: itemRef.subregisterID,\n }))\n : [];\n const supersedingItems = (\n <RelatedItems\n availableClassIDs={[itemClass.meta.id]}\n itemRefs={supersedingItemRefs}\n onChange={!isBusy\n ? (items) => items.length > 0\n ? handleSupersedeWith(items.map(ref => ref.itemID))\n : handleClearProposal()\n : undefined}\n />\n );\n\n if (itemIsProposable) {\n if (itemHasProposal) {\n const proposeBtn: ButtonProps = {\n children: `Edit ${proposal.type === 'amendment' ? proposal.amendmentType : proposal.type} proposal for this item`,\n icon: 'edit',\n active: isEditingProposal,\n disabled: isBusy,\n onClick: () => {\n if (isEditingProposal) {\n setIsEditingProposal(false);\n setEditedItemData(null);\n if (proposal && proposal.type !== 'amendment') {\n }\n } else {\n setIsEditingProposal(true);\n if (proposal && proposal.type !== 'amendment') {\n setEditedItemData(item.data);\n }\n }\n },\n };\n if (isEditingProposal) {\n const editActions: ActionProps[] = [{\n disabled: isBusy || (itemDataHasChanges && proposal.type !== 'amendment'),\n onClick: handleClearProposal,\n icon: 'trash',\n children: \"Remove\",\n tooltip: [\n `NOTE: Discarding this proposal `,\n `will discard ${proposal.type === 'addition' ? \"new\" : \"changes to\"} item’s data `,\n 'you provided as part of the proposal.',\n ].join(''),\n intent: proposal.type !== 'amendment' ? 'danger' : 'warning',\n }];\n if (isEditingItemData) {\n editActions.push(saveEditedItemDataButton);\n } else if (proposal.type === 'amendment' && proposal.amendmentType === 'supersession') {\n editActions.push({\n disabled: isBusy,\n children: \"Specify superseding items\",\n popup: <div css={css`padding: 10px;`}>{supersedingItems}</div>,\n });\n }\n actions.push([proposeBtn, ...editActions]);\n } else {\n actions.push(proposeBtn);\n if (canCompare) {\n actions.push([{\n disabled: isBusy,\n children: \"Prior version\",\n active: preferredComparison === 'prior',\n onClick: preferredComparison === 'prior'\n ? () => setPreferredComparison(null)\n : () => setPreferredComparison('prior'),\n }, {\n disabled: isBusy,\n children: \"Diff\",\n active: preferredComparison === 'diff',\n onClick: preferredComparison === 'diff'\n ? () => setPreferredComparison(null)\n : () => setPreferredComparison('diff'),\n }]);\n }\n }\n } else {\n const proposeBtn: ButtonProps = {\n children: \"Propose to change this item\",\n icon: 'lightbulb',\n active: isEditingProposal,\n disabled: isBusy,\n onClick: () => setIsEditingProposal(v => !v),\n };\n if (isEditingProposal) {\n const proposalGroup = [proposeBtn, {\n disabled: isBusy || itemHasProposal,\n onClick: handleRetire,\n children: \"Retire\",\n }, {\n disabled: isBusy || itemHasProposal,\n onClick: handleInvalidate,\n children: \"Invalidate\",\n }, {\n disabled: isBusy || itemHasProposal || isEditingItemData,\n popup: supersedingItems,\n children: \"Supersede\",\n }, {\n disabled: isBusy || diffMode,\n active: isEditingItemData,\n onClick: () => setEditedItemData(d => d === null ? item.data : null),\n children: \"Clarify\",\n }];\n if (isEditingItemData && itemDataHasChanges) {\n proposalGroup.push(saveEditedItemDataButton);\n }\n actions.push(proposalGroup);\n } else {\n actions.push(proposeBtn);\n }\n }\n }\n }\n // TODO: diff view\n\n return actions;\n }, [\n isBusy,\n itemClass.meta.id,\n\n proposal === null,\n proposal?.type,\n (proposal as Supersession)?.supersedingItemIDs?.toString(),\n\n activeCRIsEditable,\n\n editedItemData === null,\n itemDataHasChanges,\n\n isEditingProposal,\n performOperation, handleSetProposal,\n historyDrawerOpenState,\n\n canCompare, preferredComparison, setPreferredComparison,\n ]);\n\n // If there’s a CR context without active CR,\n // or active CR isn’t the same as the one in CR context,\n // then we can assume that the item is shown in proposal window\n // and we’d set window title to proposal’s title rather than item’s.\n // If there’s a CR context and active CR and they’re the same\n // then it *could* be that the item is shown in its own tab;\n // we will render proposal’s title if the item appears in the change request\n // (makes sense because the user *is* technically viewing a proposal then).\n const windowTitle: string = (\n activeCR && (\n !globallyActiveCRID\n || activeCR.id !== globallyActiveCRID\n || activeCR.items[itemPath]\n )\n ) ? `Proposal ${maybeEllipsizeString(activeCR.justification, 20)}…`\n : `${itemClass.meta.title ?? 'register item'} #${item.id}`;\n\n const detailsDivRef = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n if (itemBefore?.data && detailsDivRef.current) {\n //console.debug(\"observing\", detailsDivRef.current, observer, itemBefore.data);\n OBSERVER.observe(detailsDivRef.current, {\n attributeFilter: ['value'],\n attributes: true,\n subtree: true,\n childList: true,\n });\n }\n return function cleanUp() {\n //console.debug(\"disconnecting observer\");\n OBSERVER.disconnect();\n };\n }, [detailsDivRef.current, itemBefore?.data]);\n\n return (\n <TabContentsWithHeader\n smallTitle={compactHeader}\n title={<ListItemView itemRef={itemRef} itemData={item.data} />}\n classification={classification}\n actions={actions}>\n <Card css={css`position: absolute; border-radius: 0; inset: ${compactHeader ? '0' : '10px'}; overflow-y: auto;`}>\n <Helmet><title>{windowTitle}</title></Helmet>\n <ProposalHistoryDrawer\n isOpen={historyDrawerOpenState}\n onClose={() => setHistoryDrawerOpenState(false)}\n itemPath={itemPath}\n />\n <div id=\"detailsDiv\" ref={detailsDivRef} data-observer-root=\"true\">\n {details}\n </div>\n </Card>\n </TabContentsWithHeader>\n );\n});\n\n\nconst ItemTitle: React.FC<{ uri: string }> = function ({ uri }) {\n const { subregisters } = useContext(BrowserCtx);\n const ref = useItemRef(subregisters !== undefined, uri);\n const clsConfig = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n const { value: itemData } = useSingleRegisterItemData(ref);\n const fallbackView = useCallback((() => <>{ref?.itemID ?? uri}</>), [uri]);\n const View = itemData\n ? (clsConfig?.views.listItemView ?? fallbackView)\n : fallbackView;\n return <View\n itemRef={ref ?? DUMMY_REF}\n itemData={itemData}\n />;\n};\n\n\nexport default {\n main: MaybeItemDetail,\n title: ItemTitle,\n} as const;\n\n\nconst CHANGED_ITEM_HIGHLIGHT_MS = 1000;\nconst OBSERVER = new MutationObserver((mutationList: MutationRecord[]) => {\n const changed: [HTMLElement, 'added' | 'removed' | 'changed'][] = [];\n\n function maybeAddChanged(el: HTMLElement, changeType: 'added' | 'changed') {\n if (!el.parentElement?.getAttribute('data-observer-root')) {\n changed.push([el, changeType]);\n }\n }\n\n mutationList.forEach((mutation) => {\n switch (mutation.type) {\n case 'childList':\n mutation.addedNodes.forEach((node) => {\n maybeAddChanged(node as HTMLElement, 'added')\n });\n //mutation.removedNodes.forEach((node) => {\n // //changedNodes.push([node as HTMLElement, 'removed']);\n // console.log('node removed', node);\n //});\n break;\n case 'attributes':\n maybeAddChanged(mutation.target as HTMLElement, 'changed')\n break;\n }\n });\n const nodesWithBackground: [HTMLElement, string, string, string][] = [];\n for (const [_el, change] of changed) {\n // FIXME: Walk parent elements until one that actually exists?\n const el = change === 'removed' ? _el.parentElement! : _el;\n nodesWithBackground.push([el, el.style.transition, el.style.backgroundColor, el.style.color]);\n el.style.transition = 'none';\n el.style.color = 'white';\n if (change === 'removed') {\n el.style.backgroundColor = Colors.RED2;\n } else {\n el.style.backgroundColor = change === 'added'\n ? Colors.GREEN2\n : Colors.INDIGO2;\n }\n }\n setTimeout(() => {\n for (const [el, , bgc, tc] of nodesWithBackground) {\n el.style.transition = 'background-color linear 1s, color linear 1s';\n el.style.backgroundColor = bgc;\n el.style.color = tc;\n }\n setTimeout(() => {\n for (const [el, tr] of nodesWithBackground) {\n el.style.transition = tr;\n }\n }, CHANGED_ITEM_HIGHLIGHT_MS);\n }, 1);\n});\n"]}
|
|
@@ -151,9 +151,18 @@ const RegisterMetaForm = function ({
|
|
|
151
151
|
|
|
152
152
|
return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_util.FormGroupAsCardInGrid, {
|
|
153
153
|
label: "Basics:",
|
|
154
|
-
paddingPx: PADDING_PX
|
|
154
|
+
paddingPx: PADDING_PX,
|
|
155
|
+
css: (0, _react2.css)`
|
|
156
|
+
min-width: 100%;
|
|
157
|
+
> .bp4-form-content {
|
|
158
|
+
flex-flow: row wrap;
|
|
159
|
+
justify-content: stretch;
|
|
160
|
+
align-items: stretch;
|
|
161
|
+
}
|
|
162
|
+
`
|
|
155
163
|
}, (0, _react2.jsx)(_core.FormGroup, {
|
|
156
|
-
label: "Name:"
|
|
164
|
+
label: "Name:",
|
|
165
|
+
css: (0, _react2.css)`flex-grow: 1;`
|
|
157
166
|
}, (0, _react2.jsx)(_core.InputGroup, {
|
|
158
167
|
fill: true,
|
|
159
168
|
value: value.name || '',
|
|
@@ -164,7 +173,8 @@ const RegisterMetaForm = function ({
|
|
|
164
173
|
}
|
|
165
174
|
}))
|
|
166
175
|
})), (0, _react2.jsx)(_core.FormGroup, {
|
|
167
|
-
label: "Uniform resource identifier:"
|
|
176
|
+
label: "Uniform resource identifier:",
|
|
177
|
+
css: (0, _react2.css)`flex-grow: 1;`
|
|
168
178
|
}, (0, _react2.jsx)(_core.InputGroup, {
|
|
169
179
|
fill: true,
|
|
170
180
|
type: "url",
|
|
@@ -175,23 +185,10 @@ const RegisterMetaForm = function ({
|
|
|
175
185
|
$set: val
|
|
176
186
|
}
|
|
177
187
|
}))
|
|
178
|
-
})), (0, _react2.jsx)(_core.FormGroup, {
|
|
179
|
-
label: "Content summary:"
|
|
180
|
-
}, (0, _react2.jsx)(_core.TextArea, {
|
|
181
|
-
fill: true,
|
|
182
|
-
value: value.contentSummary || '',
|
|
183
|
-
readOnly: !onChange,
|
|
184
|
-
onChange: makeFormEventHandler(val => ({
|
|
185
|
-
contentSummary: {
|
|
186
|
-
$set: val
|
|
187
|
-
}
|
|
188
|
-
}))
|
|
189
188
|
})), (0, _react2.jsx)(_core.FormGroup, {
|
|
190
189
|
label: "Operating language (locale):",
|
|
191
190
|
helperText: "Name, country and ISO 639-2 language code."
|
|
192
|
-
}, (0, _react2.jsx)(_core.ControlGroup, {
|
|
193
|
-
vertical: true
|
|
194
|
-
}, (0, _react2.jsx)(_core.InputGroup, {
|
|
191
|
+
}, (0, _react2.jsx)(_core.ControlGroup, null, (0, _react2.jsx)(_core.InputGroup, {
|
|
195
192
|
readOnly: !onChange,
|
|
196
193
|
placeholder: "E.g., Welsh",
|
|
197
194
|
value: (_d = (_c = value.operatingLanguage) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : '',
|
|
@@ -202,11 +199,28 @@ const RegisterMetaForm = function ({
|
|
|
202
199
|
value: (_f = (_e = value.operatingLanguage) === null || _e === void 0 ? void 0 : _e.country) !== null && _f !== void 0 ? _f : '',
|
|
203
200
|
onChange: handleOperatingLanguageChange('country')
|
|
204
201
|
}), (0, _react2.jsx)(_core.InputGroup, {
|
|
202
|
+
css: (0, _react2.css)`width: 4em;`,
|
|
205
203
|
readOnly: !onChange,
|
|
206
204
|
placeholder: "3-character language code from ISO 639-2",
|
|
207
205
|
value: (_h = (_g = value.operatingLanguage) === null || _g === void 0 ? void 0 : _g.languageCode) !== null && _h !== void 0 ? _h : '',
|
|
208
206
|
onChange: handleOperatingLanguageChange('languageCode')
|
|
209
207
|
})))), (0, _react2.jsx)(_util.FormGroupAsCardInGrid, {
|
|
208
|
+
label: "Content summary:",
|
|
209
|
+
paddingPx: PADDING_PX,
|
|
210
|
+
css: (0, _react2.css)`min-width: 100%;`
|
|
211
|
+
}, (0, _react2.jsx)(_core.FormGroup, {
|
|
212
|
+
helperText: "HTML is allowed."
|
|
213
|
+
}, (0, _react2.jsx)(_core.TextArea, {
|
|
214
|
+
fill: true,
|
|
215
|
+
css: (0, _react2.css)`height: 8em !important;`,
|
|
216
|
+
value: value.contentSummary || '',
|
|
217
|
+
readOnly: !onChange,
|
|
218
|
+
onChange: makeFormEventHandler(val => ({
|
|
219
|
+
contentSummary: {
|
|
220
|
+
$set: val
|
|
221
|
+
}
|
|
222
|
+
}))
|
|
223
|
+
}))), (0, _react2.jsx)(_util.FormGroupAsCardInGrid, {
|
|
210
224
|
paddingPx: PADDING_PX,
|
|
211
225
|
label: "Organizations:",
|
|
212
226
|
css: (0, _react2.css)`min-width: 100%`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegisterMetaForm.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterMeta/RegisterMetaForm.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport update, { type Spec } from 'immutability-helper';\nimport React from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n ControlGroup,\n InputGroup,\n FormGroup,\n TextArea,\n HTMLTable,\n HTMLSelect,\n Button,\n ButtonGroup,\n MenuItem,\n} from '@blueprintjs/core';\nimport { MultiSelect2 as Select } from '@blueprintjs/select';\nimport { FormGroupAsCardInGrid } from '../../../views/util'; \nimport type { Register, RegisterStakeholder, Locale } from '../../../types';\nimport {\n STAKEHOLDER_ROLES,\n type Contact,\n type Organization,\n type StakeholderOrgAffiliation,\n StakeholderRole,\n StakeholderRoleLabels,\n type StakeholderRoleType,\n} from '../../../types/stakeholder';\n\n\nconst DUMMY_CONTACT: Contact = {\n label: 'email',\n value: 'example@example.com',\n} as const;\n\nconst DUMMY_ORG: Organization = {\n name: 'New organization',\n logoURL: '',\n} as const;\n \n// const DUMMY_PARTY: Register[\"stakeholders\"][number][\"parties\"][number] = {\n// name: '',\n// contacts: [DUMMY_CONTACT],\n// };\n\nconst DUMMY_STAKEHOLDER: Register[\"stakeholders\"][number] = {\n roles: [StakeholderRole.Submitter],\n name: 'New stakeholder',\n gitServerUsername: undefined,\n affiliations: {},\n contacts: [DUMMY_CONTACT] as Contact[],\n //parties: [DUMMY_PARTY],\n} as const;\n\n\nconst RegisterMetaForm: React.FC<{\n value: Register;\n onChange?: (newMeta: Register) => void;\n className?: string;\n}> = function ({ value, onChange, className }) {\n\n function handleOperatingLanguageChange(fieldName: keyof Omit<Locale, 'characterEncoding'>) {\n return (evt: React.FormEvent<HTMLInputElement>) => {\n const newValue = update(value, { operatingLanguage: op => update(op ?? {}, { [fieldName]: { $set: evt.currentTarget.value } }) });\n onChange!(newValue);\n }\n }\n\n function makeFormEventHandler\n <T extends HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement = HTMLInputElement>\n (func: (val: string) => Spec<typeof value>) {\n return (evt: React.FormEvent<T>) => {\n const spec = func(evt.currentTarget.value);\n if (spec) {\n onChange!(update(value, spec));\n }\n };\n }\n\n const stakeholders = value.stakeholders ?? [];\n\n const orgs = value.organizations ?? {};\n const organizationIDs = Object.keys(orgs);\n\n function makeStakeholderChangeHandler<T extends HTMLInputElement | HTMLSelectElement>(\n idx: number,\n func: (val: string) => Spec<typeof value[\"stakeholders\"][number]>,\n ) {\n return makeFormEventHandler<T>(val => ({ stakeholders: { [idx]: func(val) } }));\n }\n\n function handleStakeholderAdd() {\n onChange!({ ...value, stakeholders: [ ...stakeholders, DUMMY_STAKEHOLDER ] });\n }\n function handleStakeholderDelete(idx: number) {\n onChange!(update(value, { stakeholders: { $splice: [[idx, 1]] } }));\n }\n\n function makeOrgChangeHandler<T extends HTMLInputElement | HTMLSelectElement>(\n orgID: string,\n func: (val: string) => Spec<typeof value[\"organizations\"][string]>,\n ) {\n return makeFormEventHandler<T>(val => ({ organizations: { [orgID]: func(val) } }));\n }\n\n function handleOrgAdd() {\n const newID = crypto.randomUUID();\n onChange!({ ...value, organizations: { ...orgs, [newID]: DUMMY_ORG } });\n }\n function handleOrgDelete(orgID: string) {\n onChange!(update(value, { organizations: { $unset: [orgID] } }));\n }\n\n function findAffiliations(orgID: string): StakeholderOrgAffiliation[] {\n return stakeholders.\n filter(s => s.affiliations?.[orgID] !== undefined).\n flatMap(s => Object.values(s.affiliations ?? {}));\n }\n\n function findAffiliationOptions(s: RegisterStakeholder) {\n return Object.entries(orgs).\n filter(([orgID]) => s.affiliations?.[orgID] === undefined).\n map(([orgID, org]) => ({\n value: orgID,\n label: org.name,\n }));\n }\n\n return (\n <>\n\n <FormGroupAsCardInGrid label=\"Basics:\" paddingPx={PADDING_PX}>\n <FormGroup label=\"Name:\">\n <InputGroup\n fill\n value={value.name || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ name: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Uniform resource identifier:\">\n <InputGroup\n fill\n type=\"url\"\n value={value.uniformResourceIdentifier || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ uniformResourceIdentifier: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Content summary:\">\n <TextArea\n fill\n value={value.contentSummary || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler<HTMLTextAreaElement>(val => ({ contentSummary: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Operating language (locale):\" helperText=\"Name, country and ISO 639-2 language code.\">\n <ControlGroup vertical>\n <InputGroup\n readOnly={!onChange}\n placeholder=\"E.g., Welsh\"\n value={value.operatingLanguage?.name ?? ''}\n onChange={handleOperatingLanguageChange('name')} />\n <InputGroup\n readOnly={!onChange}\n placeholder=\"3-character numerical country code from ISO 3166-1\"\n value={value.operatingLanguage?.country ?? ''}\n onChange={handleOperatingLanguageChange('country')} />\n <InputGroup\n readOnly={!onChange}\n placeholder=\"3-character language code from ISO 639-2\"\n value={value.operatingLanguage?.languageCode ?? ''}\n onChange={handleOperatingLanguageChange('languageCode')} />\n </ControlGroup>\n </FormGroup>\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n paddingPx={PADDING_PX}\n label=\"Organizations:\"\n css={css`min-width: 100%`}\n helperText={onChange\n ? <Button onClick={handleOrgAdd} icon=\"add\">Add</Button>\n : null}>\n {organizationIDs.length > 0\n ? <HTMLTable css={css`margin: 0 -${PADDING_PX}px;`}>\n <thead>\n <tr css={css`& > * { white-space: nowrap }`}>\n <th>Name</th>\n <th>Logo URL</th>\n </tr>\n </thead>\n <tbody>\n {[ ...Object.entries(value.organizations) ].map(([orgID, s]) =>\n <tr key={orgID}>\n <td>\n <InputGroup\n readOnly={!onChange}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange || findAffiliations(orgID).length > 0}\n title=\"Delete this organization\"\n onClick={() => handleOrgDelete(orgID)}\n icon=\"cross\"\n intent=\"warning\"\n />\n }\n onChange={makeOrgChangeHandler(orgID, (val) =>\n ({ name: { $set: val } })\n )}\n value={s.name} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeOrgChangeHandler(orgID, (val) =>\n ({ logoURL: { $set: val } })\n )}\n value={s.logoURL} />\n </td>\n </tr>)}\n </tbody>\n </HTMLTable>\n : null}\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n paddingPx={PADDING_PX}\n label=\"Users:\"\n css={css`min-width: 100%`}\n helperText={onChange\n ? <Button onClick={handleStakeholderAdd} icon=\"add\">Add</Button>\n : null}>\n {stakeholders.length > 0\n ? <HTMLTable css={css`margin: 0 -${PADDING_PX}px;`}>\n <thead>\n <tr css={css`& > * { white-space: nowrap }`}>\n <th>Name</th>\n <th>Git server username</th>\n <th>Role</th>\n <th>Affiliations</th>\n <th>Contact email</th>\n </tr>\n </thead>\n <tbody>\n {[ ...stakeholders.entries() ].map(([idx, s]) =>\n <tr key={idx}>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ name: { $set: val } })\n )}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange}\n title=\"Delete this stakeholder\"\n onClick={() => handleStakeholderDelete(idx)}\n icon=\"cross\"\n intent=\"warning\"\n />\n }\n value={s.name} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ gitServerUsername: { $set: val || undefined } })\n )}\n value={s.gitServerUsername || ''} />\n </td>\n <td>\n <Select<StakeholderRoleType>\n items={STAKEHOLDER_ROLES}\n popoverProps={{\n minimal: true,\n matchTargetWidth: true,\n }}\n itemPredicate={(query, roleID) =>\n // Match can be in both role ID and role label\n `${roleID} ${StakeholderRoleLabels[roleID]}`.\n toLowerCase().\n indexOf(query.toLowerCase()) >= 0\n }\n resetOnSelect\n css={css`max-width: 300px;`}\n selectedItems={[...(s.roles ?? [(s as any).role as string])]}\n disabled={!onChange || !s.roles}\n itemDisabled={roleID => s.roles?.includes(roleID)}\n tagRenderer={roleID => StakeholderRoleLabels[roleID]}\n // Make each role take full width & so stak them vertically\n tagInputProps={{ tagProps: { className: 'bp4-fill' }}}\n onRemove={roleID =>\n onChange!(update(value, { stakeholders: { [idx]: { roles: { $splice: [[s.roles.indexOf(roleID), 1]] } } } }))\n }\n itemRenderer={(roleID, { handleClick, modifiers: { active, disabled } }) =>\n <MenuItem\n text={StakeholderRoleLabels[roleID]}\n active={active}\n disabled={disabled}\n onClick={handleClick}\n />\n }\n onItemSelect={roleID =>\n onChange!(update(value, { stakeholders: { [idx]: { roles: { $push: [roleID] } } } }))\n }\n />\n </td>\n <td>\n <ControlGroup vertical>\n {Object.entries(s.affiliations ?? {}).\n sort(([, aff], [, aff2]) => aff2.role.localeCompare(aff.role)).\n map(([orgID, affiliation], _affiliationIdx) =>\n <ButtonGroup key={orgID}>\n <InputGroup\n key=\"org\"\n readOnly\n value={orgs[orgID]?.name ?? orgID}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange}\n title=\"Delete this affiliation\"\n onClick={() => onChange!(update(value, { stakeholders: { [idx]: { affiliations: { $unset: [orgID] } } } }))}\n icon=\"cross\"\n />\n }\n />\n <HTMLSelect\n key=\"set-role\"\n disabled={!onChange}\n value={affiliation.role}\n options={[\n { value: 'pointOfContact', label: 'point of contact' },\n { value: 'member', label: 'member' },\n ]}\n onChange={(evt) => onChange!(update(value, { stakeholders: { [idx]: { affiliations: { [orgID]: { role: { $set: evt.currentTarget.value as 'pointOfContact' | 'member' } } } } } }))}\n title=\"Specify role in organization\"\n />\n </ButtonGroup>\n )}\n {findAffiliationOptions(s).length > 0 && onChange\n ? <HTMLSelect\n key=\"add\"\n options={[\n { label: \"Append affiliation…\", value: '' },\n ...findAffiliationOptions(s),\n ]}\n value=\"\"\n onChange={(evt) => evt.currentTarget.value?.trim() !== ''\n ? onChange!(update(value, { stakeholders: { [idx]: { affiliations: { [evt.currentTarget.value]: { $set: { role: 'member' } } } } } }))\n : void 0}\n title=\"Append affiliation…\"\n />\n : null}\n </ControlGroup>\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n type=\"email\"\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ contacts: { $set: [{ label: 'email', value: val }] } })\n )}\n value={s.contacts?.[0]?.value || ''} />\n </td>\n </tr>)}\n </tbody>\n </HTMLTable>\n : null}\n </FormGroupAsCardInGrid>\n </>\n );\n};\n\n\nconst PADDING_PX = 11;\n\n\nexport default RegisterMetaForm;\n"]}
|
|
1
|
+
{"version":3,"file":"RegisterMetaForm.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterMeta/RegisterMetaForm.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport update, { type Spec } from 'immutability-helper';\nimport React from 'react';\nimport { jsx, css } from '@emotion/react';\nimport {\n ControlGroup,\n InputGroup,\n FormGroup,\n TextArea,\n HTMLTable,\n HTMLSelect,\n Button,\n ButtonGroup,\n MenuItem,\n} from '@blueprintjs/core';\nimport { MultiSelect2 as Select } from '@blueprintjs/select';\nimport { FormGroupAsCardInGrid } from '../../../views/util'; \nimport type { Register, RegisterStakeholder, Locale } from '../../../types';\nimport {\n STAKEHOLDER_ROLES,\n type Contact,\n type Organization,\n type StakeholderOrgAffiliation,\n StakeholderRole,\n StakeholderRoleLabels,\n type StakeholderRoleType,\n} from '../../../types/stakeholder';\n\n\nconst DUMMY_CONTACT: Contact = {\n label: 'email',\n value: 'example@example.com',\n} as const;\n\nconst DUMMY_ORG: Organization = {\n name: 'New organization',\n logoURL: '',\n} as const;\n \n// const DUMMY_PARTY: Register[\"stakeholders\"][number][\"parties\"][number] = {\n// name: '',\n// contacts: [DUMMY_CONTACT],\n// };\n\nconst DUMMY_STAKEHOLDER: Register[\"stakeholders\"][number] = {\n roles: [StakeholderRole.Submitter],\n name: 'New stakeholder',\n gitServerUsername: undefined,\n affiliations: {},\n contacts: [DUMMY_CONTACT] as Contact[],\n //parties: [DUMMY_PARTY],\n} as const;\n\n\nconst RegisterMetaForm: React.FC<{\n value: Register;\n onChange?: (newMeta: Register) => void;\n className?: string;\n}> = function ({ value, onChange, className }) {\n\n function handleOperatingLanguageChange(fieldName: keyof Omit<Locale, 'characterEncoding'>) {\n return (evt: React.FormEvent<HTMLInputElement>) => {\n const newValue = update(value, { operatingLanguage: op => update(op ?? {}, { [fieldName]: { $set: evt.currentTarget.value } }) });\n onChange!(newValue);\n }\n }\n\n function makeFormEventHandler\n <T extends HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement = HTMLInputElement>\n (func: (val: string) => Spec<typeof value>) {\n return (evt: React.FormEvent<T>) => {\n const spec = func(evt.currentTarget.value);\n if (spec) {\n onChange!(update(value, spec));\n }\n };\n }\n\n const stakeholders = value.stakeholders ?? [];\n\n const orgs = value.organizations ?? {};\n const organizationIDs = Object.keys(orgs);\n\n function makeStakeholderChangeHandler<T extends HTMLInputElement | HTMLSelectElement>(\n idx: number,\n func: (val: string) => Spec<typeof value[\"stakeholders\"][number]>,\n ) {\n return makeFormEventHandler<T>(val => ({ stakeholders: { [idx]: func(val) } }));\n }\n\n function handleStakeholderAdd() {\n onChange!({ ...value, stakeholders: [ ...stakeholders, DUMMY_STAKEHOLDER ] });\n }\n function handleStakeholderDelete(idx: number) {\n onChange!(update(value, { stakeholders: { $splice: [[idx, 1]] } }));\n }\n\n function makeOrgChangeHandler<T extends HTMLInputElement | HTMLSelectElement>(\n orgID: string,\n func: (val: string) => Spec<typeof value[\"organizations\"][string]>,\n ) {\n return makeFormEventHandler<T>(val => ({ organizations: { [orgID]: func(val) } }));\n }\n\n function handleOrgAdd() {\n const newID = crypto.randomUUID();\n onChange!({ ...value, organizations: { ...orgs, [newID]: DUMMY_ORG } });\n }\n function handleOrgDelete(orgID: string) {\n onChange!(update(value, { organizations: { $unset: [orgID] } }));\n }\n\n function findAffiliations(orgID: string): StakeholderOrgAffiliation[] {\n return stakeholders.\n filter(s => s.affiliations?.[orgID] !== undefined).\n flatMap(s => Object.values(s.affiliations ?? {}));\n }\n\n function findAffiliationOptions(s: RegisterStakeholder) {\n return Object.entries(orgs).\n filter(([orgID]) => s.affiliations?.[orgID] === undefined).\n map(([orgID, org]) => ({\n value: orgID,\n label: org.name,\n }));\n }\n\n return (\n <>\n\n <FormGroupAsCardInGrid label=\"Basics:\" paddingPx={PADDING_PX}\n css={css`\n min-width: 100%;\n > .bp4-form-content {\n flex-flow: row wrap;\n justify-content: stretch;\n align-items: stretch;\n }\n `}>\n <FormGroup label=\"Name:\" css={css`flex-grow: 1;`}>\n <InputGroup\n fill\n value={value.name || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ name: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Uniform resource identifier:\" css={css`flex-grow: 1;`}>\n <InputGroup\n fill\n type=\"url\"\n value={value.uniformResourceIdentifier || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler(val => ({ uniformResourceIdentifier: { $set: val } }))}\n />\n </FormGroup>\n\n <FormGroup label=\"Operating language (locale):\" helperText=\"Name, country and ISO 639-2 language code.\">\n <ControlGroup>\n <InputGroup\n readOnly={!onChange}\n placeholder=\"E.g., Welsh\"\n value={value.operatingLanguage?.name ?? ''}\n onChange={handleOperatingLanguageChange('name')} />\n <InputGroup\n readOnly={!onChange}\n placeholder=\"3-character numerical country code from ISO 3166-1\"\n value={value.operatingLanguage?.country ?? ''}\n onChange={handleOperatingLanguageChange('country')} />\n <InputGroup\n css={css`width: 4em;`}\n readOnly={!onChange}\n placeholder=\"3-character language code from ISO 639-2\"\n value={value.operatingLanguage?.languageCode ?? ''}\n onChange={handleOperatingLanguageChange('languageCode')} />\n </ControlGroup>\n </FormGroup>\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n label=\"Content summary:\"\n paddingPx={PADDING_PX}\n css={css`min-width: 100%;`}>\n <FormGroup helperText=\"HTML is allowed.\">\n <TextArea\n fill\n css={css`height: 8em !important;`}\n value={value.contentSummary || ''}\n readOnly={!onChange}\n onChange={makeFormEventHandler<HTMLTextAreaElement>(val => ({ contentSummary: { $set: val } }))}\n />\n </FormGroup>\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n paddingPx={PADDING_PX}\n label=\"Organizations:\"\n css={css`min-width: 100%`}\n helperText={onChange\n ? <Button onClick={handleOrgAdd} icon=\"add\">Add</Button>\n : null}>\n {organizationIDs.length > 0\n ? <HTMLTable css={css`margin: 0 -${PADDING_PX}px;`}>\n <thead>\n <tr css={css`& > * { white-space: nowrap }`}>\n <th>Name</th>\n <th>Logo URL</th>\n </tr>\n </thead>\n <tbody>\n {[ ...Object.entries(value.organizations) ].map(([orgID, s]) =>\n <tr key={orgID}>\n <td>\n <InputGroup\n readOnly={!onChange}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange || findAffiliations(orgID).length > 0}\n title=\"Delete this organization\"\n onClick={() => handleOrgDelete(orgID)}\n icon=\"cross\"\n intent=\"warning\"\n />\n }\n onChange={makeOrgChangeHandler(orgID, (val) =>\n ({ name: { $set: val } })\n )}\n value={s.name} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeOrgChangeHandler(orgID, (val) =>\n ({ logoURL: { $set: val } })\n )}\n value={s.logoURL} />\n </td>\n </tr>)}\n </tbody>\n </HTMLTable>\n : null}\n </FormGroupAsCardInGrid>\n\n <FormGroupAsCardInGrid\n paddingPx={PADDING_PX}\n label=\"Users:\"\n css={css`min-width: 100%`}\n helperText={onChange\n ? <Button onClick={handleStakeholderAdd} icon=\"add\">Add</Button>\n : null}>\n {stakeholders.length > 0\n ? <HTMLTable css={css`margin: 0 -${PADDING_PX}px;`}>\n <thead>\n <tr css={css`& > * { white-space: nowrap }`}>\n <th>Name</th>\n <th>Git server username</th>\n <th>Role</th>\n <th>Affiliations</th>\n <th>Contact email</th>\n </tr>\n </thead>\n <tbody>\n {[ ...stakeholders.entries() ].map(([idx, s]) =>\n <tr key={idx}>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ name: { $set: val } })\n )}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange}\n title=\"Delete this stakeholder\"\n onClick={() => handleStakeholderDelete(idx)}\n icon=\"cross\"\n intent=\"warning\"\n />\n }\n value={s.name} />\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ gitServerUsername: { $set: val || undefined } })\n )}\n value={s.gitServerUsername || ''} />\n </td>\n <td>\n <Select<StakeholderRoleType>\n items={STAKEHOLDER_ROLES}\n popoverProps={{\n minimal: true,\n matchTargetWidth: true,\n }}\n itemPredicate={(query, roleID) =>\n // Match can be in both role ID and role label\n `${roleID} ${StakeholderRoleLabels[roleID]}`.\n toLowerCase().\n indexOf(query.toLowerCase()) >= 0\n }\n resetOnSelect\n css={css`max-width: 300px;`}\n selectedItems={[...(s.roles ?? [(s as any).role as string])]}\n disabled={!onChange || !s.roles}\n itemDisabled={roleID => s.roles?.includes(roleID)}\n tagRenderer={roleID => StakeholderRoleLabels[roleID]}\n // Make each role take full width & so stak them vertically\n tagInputProps={{ tagProps: { className: 'bp4-fill' }}}\n onRemove={roleID =>\n onChange!(update(value, { stakeholders: { [idx]: { roles: { $splice: [[s.roles.indexOf(roleID), 1]] } } } }))\n }\n itemRenderer={(roleID, { handleClick, modifiers: { active, disabled } }) =>\n <MenuItem\n text={StakeholderRoleLabels[roleID]}\n active={active}\n disabled={disabled}\n onClick={handleClick}\n />\n }\n onItemSelect={roleID =>\n onChange!(update(value, { stakeholders: { [idx]: { roles: { $push: [roleID] } } } }))\n }\n />\n </td>\n <td>\n <ControlGroup vertical>\n {Object.entries(s.affiliations ?? {}).\n sort(([, aff], [, aff2]) => aff2.role.localeCompare(aff.role)).\n map(([orgID, affiliation], _affiliationIdx) =>\n <ButtonGroup key={orgID}>\n <InputGroup\n key=\"org\"\n readOnly\n value={orgs[orgID]?.name ?? orgID}\n rightElement={\n <Button\n key=\"delete\"\n outlined\n disabled={!onChange}\n title=\"Delete this affiliation\"\n onClick={() => onChange!(update(value, { stakeholders: { [idx]: { affiliations: { $unset: [orgID] } } } }))}\n icon=\"cross\"\n />\n }\n />\n <HTMLSelect\n key=\"set-role\"\n disabled={!onChange}\n value={affiliation.role}\n options={[\n { value: 'pointOfContact', label: 'point of contact' },\n { value: 'member', label: 'member' },\n ]}\n onChange={(evt) => onChange!(update(value, { stakeholders: { [idx]: { affiliations: { [orgID]: { role: { $set: evt.currentTarget.value as 'pointOfContact' | 'member' } } } } } }))}\n title=\"Specify role in organization\"\n />\n </ButtonGroup>\n )}\n {findAffiliationOptions(s).length > 0 && onChange\n ? <HTMLSelect\n key=\"add\"\n options={[\n { label: \"Append affiliation…\", value: '' },\n ...findAffiliationOptions(s),\n ]}\n value=\"\"\n onChange={(evt) => evt.currentTarget.value?.trim() !== ''\n ? onChange!(update(value, { stakeholders: { [idx]: { affiliations: { [evt.currentTarget.value]: { $set: { role: 'member' } } } } } }))\n : void 0}\n title=\"Append affiliation…\"\n />\n : null}\n </ControlGroup>\n </td>\n <td>\n <InputGroup\n readOnly={!onChange}\n type=\"email\"\n onChange={makeStakeholderChangeHandler(idx, (val) =>\n ({ contacts: { $set: [{ label: 'email', value: val }] } })\n )}\n value={s.contacts?.[0]?.value || ''} />\n </td>\n </tr>)}\n </tbody>\n </HTMLTable>\n : null}\n </FormGroupAsCardInGrid>\n </>\n );\n};\n\n\nconst PADDING_PX = 11;\n\n\nexport default RegisterMetaForm;\n"]}
|
|
@@ -38,7 +38,7 @@ function useRegisterVersion() {
|
|
|
38
38
|
});
|
|
39
39
|
const result = latestAcceptedProposalDisposedTimestamp.value.unnamedChain;
|
|
40
40
|
|
|
41
|
-
if (result) {
|
|
41
|
+
if (result && result.getSeconds !== undefined) {
|
|
42
42
|
return result;
|
|
43
43
|
} else {
|
|
44
44
|
//console.error("Invalid register version value", result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRegisterVersion.js","sourceRoot":"","sources":["../../../src/views/hooks/useRegisterVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG9C;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACxC,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEzD,MAAM,uCAAuC,GAAG,iBAAiB,CAAC;QAChE,MAAM,EAAE;YACN,YAAY,EAAE;gBACb,aAAa,EAAE;;oBAEF,aAAa,SAAS,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,kBAAkB;EACrF;gBACD,OAAO,EAAE,8DAA8D;gBACvE,UAAU,EAAE;;;EAGX;aACK;SACF;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,uCAAuC,CAAC,KAAK,CAAC,YAAoB,CAAC;IAClF,IAAI,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"useRegisterVersion.js","sourceRoot":"","sources":["../../../src/views/hooks/useRegisterVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG9C;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACxC,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEzD,MAAM,uCAAuC,GAAG,iBAAiB,CAAC;QAChE,MAAM,EAAE;YACN,YAAY,EAAE;gBACb,aAAa,EAAE;;oBAEF,aAAa,SAAS,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,kBAAkB;EACrF;gBACD,OAAO,EAAE,8DAA8D;gBACvE,UAAU,EAAE;;;EAGX;aACK;SACF;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,uCAAuC,CAAC,KAAK,CAAC,YAAoB,CAAC;IAClF,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE;QAC7C,OAAO,MAAM,CAAC;KACf;SAAM;QACL,0DAA0D;QAC1D,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;KACzF;AACH,CAAC","sourcesContent":["import { useContext } from 'react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { CR_BASE_QUERY } from '../../proposals/queries';\nimport { State } from '../../proposals/types';\n\n\n/**\n * By “register version” in this case\n * the date of latest accepted proposal is meant.\n */\nexport default function useRegisterVersion(): Date {\n const { useMapReducedData } = useContext(DatasetContext);\n\n const latestAcceptedProposalDisposedTimestamp = useMapReducedData({\n chains: {\n unnamedChain: {\n \tpredicateFunc: `\n const objPath = key, obj = value;\n return (${CR_BASE_QUERY} && ['${State.ACCEPTED}', '${State.ACCEPTED_ON_APPEAL}'].indexOf(obj.state) >= 0);\n\t`,\n\tmapFunc: `if (value?.timeDisposed) emit(new Date(value.timeDisposed));`,\n\treduceFunc: `\n\t if (!accumulator || value > accumulator) { return value; }\n\t else { return accumulator; }\n\t`,\n },\n },\n });\n\n const result = latestAcceptedProposalDisposedTimestamp.value.unnamedChain as Date;\n if (result && result.getSeconds !== undefined) {\n return result;\n } else {\n //console.error(\"Invalid register version value\", result);\n throw new Error(\"Failed to obtain register version (obtained value is not a timestamp)\")\n }\n}\n\n"]}
|
package/views/index.js
CHANGED
|
@@ -97,14 +97,16 @@ const RegistryWorkspace = function RegistryWorkspace() {
|
|
|
97
97
|
let version;
|
|
98
98
|
|
|
99
99
|
try {
|
|
100
|
-
version = (0, _react2.jsx)(
|
|
100
|
+
version = (0, _react2.jsx)(_react.default.Fragment, null, "Viewing register as of ", (0, _react2.jsx)("span", {
|
|
101
|
+
title: "Date of latest accepted proposal"
|
|
102
|
+
}, (0, _react2.jsx)(_util.Datestamp, {
|
|
101
103
|
date: (0, _useRegisterVersion.default)(),
|
|
102
104
|
showTime: true,
|
|
103
105
|
useUTC: true
|
|
104
|
-
});
|
|
106
|
+
})));
|
|
105
107
|
} catch (e) {
|
|
106
108
|
//console.error("Failed to get register version", e);
|
|
107
|
-
version = (0, _react2.jsx)(_react.default.Fragment, null, "
|
|
109
|
+
version = (0, _react2.jsx)(_react.default.Fragment, null, "Viewing published register (version not available)");
|
|
108
110
|
}
|
|
109
111
|
|
|
110
112
|
const globalMode = (0, _react.useMemo)(() => activeChangeRequest ? {
|
|
@@ -114,9 +116,7 @@ const RegistryWorkspace = function RegistryWorkspace() {
|
|
|
114
116
|
intent: 'danger',
|
|
115
117
|
onClick: () => spawnTab(_protocolRegistry.Protocols.PROPOSAL_WORK)
|
|
116
118
|
} : {
|
|
117
|
-
content:
|
|
118
|
-
title: "Date of latest accepted proposal"
|
|
119
|
-
}, version)),
|
|
119
|
+
content: version,
|
|
120
120
|
intent: 'none',
|
|
121
121
|
minimal: true
|
|
122
122
|
}, [activeChangeRequest === null || activeChangeRequest === void 0 ? void 0 : activeChangeRequest.id, spawnTab, version]);
|
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 { Helmet } from 'react-helmet';\n\nimport { Colors } from '@blueprintjs/core';\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 { BrowserCtx } from './BrowserCtx';\nimport { Datestamp, _getRelatedClass } from './util';\nimport RegisterHome from './detail/RegisterHome2';\nimport protocolRegistry, { Protocols, type Protocol } from './protocolRegistry';\nimport {\n ChangeRequestContext,\n ChangeRequestContextProvider,\n} from '../proposals/ChangeRequestContext';\nimport useRegisterVersion from './hooks/useRegisterVersion';\nimport { sidebarConfig, sidebarConfigForStakeholder } from './sidebar';\nimport { useItemRef, itemPathInCR, itemPathNotInCR } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, []>(\n undefined,\n [],\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> =\nfunction RegistryView (props) {\n const Workspace = useMemo(() => props.CustomWorkspace ?? RegistryWorkspace, []);\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <Workspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nexport const 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 { registerMetadata, stakeholder } = useContext(BrowserCtx);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\n\n let version: JSX.Element;\n try {\n version = <Datestamp date={useRegisterVersion()} showTime useUTC />;\n } catch (e) {\n //console.error(\"Failed to get register version\", e);\n version = <>N/A</>;\n }\n\n const globalMode: TabbedWorkspaceProps<any>['globalMode'] = useMemo(\n (() => activeChangeRequest\n ? {\n content: <>\n Viewing register as proposed per “<span title=\"Justification of active proposal\">{activeChangeRequest.justification}</span>”\n </>,\n intent: 'danger',\n onClick: () => spawnTab(Protocols.PROPOSAL_WORK),\n }\n : {\n content: <>\n Viewing register as of <span title=\"Date of latest accepted proposal\">{version}</span>\n </>,\n intent: 'none',\n minimal: true,\n }),\n [activeChangeRequest?.id, spawnTab, version],\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 const activeSidebarConfig = useMemo(\n (() => stakeholder ? sidebarConfigForStakeholder : sidebarConfig),\n [stakeholder]);\n\n return (\n <div css={css`flex: 1 1 auto; display: flex; flex-flow: column nowrap; overflow: hidden;`}>\n <Helmet><title>{registerMetadata?.name ?? \"Unnamed registry\"}</title></Helmet>\n <header css={css`\n min-height: 2em;\n flex: 0;\n line-height: 1;\n font-size: 200%;\n background: ${Colors.LIGHT_GRAY2};\n padding: .5em 20px;\n .bp4-dark & {\n background: ${Colors.DARK_GRAY2};\n }\n display: flex;\n flex-flow: row nowrap;\n `}>\n <h1 css={css`\n line-height: unset !important;\n font-size: unset !important;\n font-weight: bold;\n color: ${Colors.DARK_GRAY5};\n .bp4-dark & {\n color: ${Colors.LIGHT_GRAY3};\n }\n margin: 0;\n flex: 1;\n letter-spacing: -.025em;\n `}>\n {registerMetadata?.name ?? 'Register'}\n </h1>\n <span css={css`font-size: 50%; display: flex; gap: 10px; align-self: flex-end;`}>\n <a>Documentation</a>\n •\n <a>Feedback</a>\n </span>\n </header>\n <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={activeSidebarConfig}\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={useMemo(() => ['Browse'], [])}\n newTabPrompt={newTabPrompt}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={useCallback((width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }, [updateSetting])}\n />\n </div>\n );\n};\n\n\nconst newTabPrompt = <RegisterHome />;\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function BrowserCtxProvider ({\n itemClassConfiguration,\n itemClassGroups,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n alterApprovedCR,\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 const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\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 = useMemo(() => {\n const pathsToRequest: Record<string, string> = {};\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 return pathsToRequest;\n }, [activeChangeRequest?.id, opts.itemPaths.sort().toString()]);\n\n const objectPaths = Object.keys(pathsToRequest).sort();\n\n const result = useObjectData({\n objectPaths,\n //nounLabel: 'register item(s)',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData = useMemo(() => {\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 return itemData;\n }, [pathsToRequest, result.value.data]);\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 const handleJumpTo = useCallback((uri: string) => {\n if (activeChangeRequestID && uri.startsWith(`${Protocols.ITEM_DETAILS}:/proposal`)) {\n const uriNotInCR = itemPathNotInCR(uri.split(`${Protocols.ITEM_DETAILS}:`)[1]);\n return spawnTab(`${Protocols.ITEM_DETAILS}:${uriNotInCR}`);\n } else {\n return spawnTab(uri);\n }\n }, [spawnTab, activeChangeRequestID]);\n\n return (\n <BrowserCtx.Provider\n value={useMemo((() => ({\n stakeholder,\n registerMetadata,\n offline: remoteUsername === undefined ? true : undefined,\n\n subregisters,\n alterApprovedCR,\n itemClasses: itemClassConfiguration,\n itemClassGroups,\n\n jumpTo: handleJumpTo,\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 handleJumpTo,\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"]}
|
|
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 { Helmet } from 'react-helmet';\n\nimport { Colors } from '@blueprintjs/core';\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 { BrowserCtx } from './BrowserCtx';\nimport { Datestamp, _getRelatedClass } from './util';\nimport RegisterHome from './detail/RegisterHome2';\nimport protocolRegistry, { Protocols, type Protocol } from './protocolRegistry';\nimport {\n ChangeRequestContext,\n ChangeRequestContextProvider,\n} from '../proposals/ChangeRequestContext';\nimport useRegisterVersion from './hooks/useRegisterVersion';\nimport { sidebarConfig, sidebarConfigForStakeholder } from './sidebar';\nimport { useItemRef, itemPathInCR, itemPathNotInCR } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, []>(\n undefined,\n [],\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> =\nfunction RegistryView (props) {\n const Workspace = useMemo(() => props.CustomWorkspace ?? RegistryWorkspace, []);\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <Workspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nexport const 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 { registerMetadata, stakeholder } = useContext(BrowserCtx);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\n\n let version: JSX.Element;\n try {\n version = <>Viewing register as of <span title=\"Date of latest accepted proposal\"><Datestamp date={useRegisterVersion()} showTime useUTC /></span></>;\n } catch (e) {\n //console.error(\"Failed to get register version\", e);\n version = <>Viewing published register (version not available)</>;\n }\n\n const globalMode: TabbedWorkspaceProps<any>['globalMode'] = useMemo(\n (() => activeChangeRequest\n ? {\n content: <>\n Viewing register as proposed per “<span title=\"Justification of active proposal\">{activeChangeRequest.justification}</span>”\n </>,\n intent: 'danger',\n onClick: () => spawnTab(Protocols.PROPOSAL_WORK),\n }\n : {\n content: version,\n intent: 'none',\n minimal: true,\n }),\n [activeChangeRequest?.id, spawnTab, version],\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 const activeSidebarConfig = useMemo(\n (() => stakeholder ? sidebarConfigForStakeholder : sidebarConfig),\n [stakeholder]);\n\n return (\n <div css={css`flex: 1 1 auto; display: flex; flex-flow: column nowrap; overflow: hidden;`}>\n <Helmet><title>{registerMetadata?.name ?? \"Unnamed registry\"}</title></Helmet>\n <header css={css`\n min-height: 2em;\n flex: 0;\n line-height: 1;\n font-size: 200%;\n background: ${Colors.LIGHT_GRAY2};\n padding: .5em 20px;\n .bp4-dark & {\n background: ${Colors.DARK_GRAY2};\n }\n display: flex;\n flex-flow: row nowrap;\n `}>\n <h1 css={css`\n line-height: unset !important;\n font-size: unset !important;\n font-weight: bold;\n color: ${Colors.DARK_GRAY5};\n .bp4-dark & {\n color: ${Colors.LIGHT_GRAY3};\n }\n margin: 0;\n flex: 1;\n letter-spacing: -.025em;\n `}>\n {registerMetadata?.name ?? 'Register'}\n </h1>\n <span css={css`font-size: 50%; display: flex; gap: 10px; align-self: flex-end;`}>\n <a>Documentation</a>\n •\n <a>Feedback</a>\n </span>\n </header>\n <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={activeSidebarConfig}\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={useMemo(() => ['Browse'], [])}\n newTabPrompt={newTabPrompt}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={useCallback((width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }, [updateSetting])}\n />\n </div>\n );\n};\n\n\nconst newTabPrompt = <RegisterHome />;\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function BrowserCtxProvider ({\n itemClassConfiguration,\n itemClassGroups,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n getQuickSearchPredicate,\n alterApprovedCR,\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 const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\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 = useMemo(() => {\n const pathsToRequest: Record<string, string> = {};\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 return pathsToRequest;\n }, [activeChangeRequest?.id, opts.itemPaths.sort().toString()]);\n\n const objectPaths = Object.keys(pathsToRequest).sort();\n\n const result = useObjectData({\n objectPaths,\n //nounLabel: 'register item(s)',\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData = useMemo(() => {\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 return itemData;\n }, [pathsToRequest, result.value.data]);\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 const handleJumpTo = useCallback((uri: string) => {\n if (activeChangeRequestID && uri.startsWith(`${Protocols.ITEM_DETAILS}:/proposal`)) {\n const uriNotInCR = itemPathNotInCR(uri.split(`${Protocols.ITEM_DETAILS}:`)[1]);\n return spawnTab(`${Protocols.ITEM_DETAILS}:${uriNotInCR}`);\n } else {\n return spawnTab(uri);\n }\n }, [spawnTab, activeChangeRequestID]);\n\n return (\n <BrowserCtx.Provider\n value={useMemo((() => ({\n stakeholder,\n registerMetadata,\n offline: remoteUsername === undefined ? true : undefined,\n\n subregisters,\n alterApprovedCR,\n itemClasses: itemClassConfiguration,\n itemClassGroups,\n\n jumpTo: handleJumpTo,\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 handleJumpTo,\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"]}
|