@riboseinc/paneron-registry-kit 2.2.32 → 2.2.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +2 -2
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/item-classes/Tree.js +6 -8
- package/item-classes/Tree.js.map +1 -1
- package/package.json +4 -3
- package/{views/change-request → proposals}/ChangeRequestContext.d.ts +3 -2
- package/{views/change-request → proposals}/ChangeRequestContext.js +8 -8
- package/proposals/ChangeRequestContext.js.map +1 -0
- package/{views/ProposalHistoryDrawer.js → proposals/HistoryDrawer.js} +11 -13
- package/proposals/HistoryDrawer.js.map +1 -0
- package/proposals/ListItem.d.ts +8 -0
- package/proposals/ListItem.js +40 -0
- package/proposals/ListItem.js.map +1 -0
- package/{views/change-request/Summary.d.ts → proposals/MetaProperties.d.ts} +4 -3
- package/proposals/MetaProperties.js +94 -0
- package/proposals/MetaProperties.js.map +1 -0
- package/proposals/NewProposalMenu.d.ts +10 -0
- package/proposals/NewProposalMenu.js +113 -0
- package/proposals/NewProposalMenu.js.map +1 -0
- package/proposals/ProposalBrowser.d.ts +22 -0
- package/{views/change-request/Proposals.js → proposals/ProposalBrowser.js} +20 -258
- package/proposals/ProposalBrowser.js.map +1 -0
- package/proposals/ProposalDetail.d.ts +6 -0
- package/proposals/ProposalDetail.js +67 -0
- package/proposals/ProposalDetail.js.map +1 -0
- package/proposals/ProposalItem.d.ts +16 -0
- package/proposals/ProposalItem.js +57 -0
- package/proposals/ProposalItem.js.map +1 -0
- package/proposals/ProposalSummary.d.ts +6 -0
- package/proposals/ProposalSummary.js +62 -0
- package/proposals/ProposalSummary.js.map +1 -0
- package/proposals/ProposalTab.d.ts +12 -0
- package/proposals/ProposalTab.js +102 -0
- package/proposals/ProposalTab.js.map +1 -0
- package/proposals/ProposalType.d.ts +11 -0
- package/proposals/ProposalType.js +99 -0
- package/proposals/ProposalType.js.map +1 -0
- package/proposals/ProposalWorkspace.d.ts +13 -0
- package/proposals/ProposalWorkspace.js +132 -0
- package/proposals/ProposalWorkspace.js.map +1 -0
- package/proposals/Search.d.ts +26 -0
- package/proposals/Search.js +109 -0
- package/proposals/Search.js.map +1 -0
- package/{views/change-request → proposals}/TransitionHistory.d.ts +3 -2
- package/{views/change-request → proposals}/TransitionHistory.js +18 -14
- package/proposals/TransitionHistory.js.map +1 -0
- package/{views/change-request → proposals}/TransitionOptions.d.ts +3 -3
- package/{views/change-request → proposals}/TransitionOptions.js +34 -12
- package/proposals/TransitionOptions.js.map +1 -0
- package/proposals/actionableGroups/Tree.js +23 -5
- package/proposals/actionableGroups/Tree.js.map +1 -1
- package/proposals/actionableGroups/queries.d.ts +0 -1
- package/proposals/actionableGroups/queries.js +7 -10
- package/proposals/actionableGroups/queries.js.map +1 -1
- package/proposals/actionableGroups/treeNodes.d.ts +2 -1
- package/proposals/actionableGroups/treeNodes.js +42 -10
- package/proposals/actionableGroups/treeNodes.js.map +1 -1
- package/proposals/index.d.ts +6 -0
- package/proposals/index.js +83 -0
- package/proposals/index.js.map +1 -0
- package/{views/change-request → proposals}/objectChangeset.d.ts +4 -4
- package/{views/change-request → proposals}/objectChangeset.js +6 -6
- package/proposals/objectChangeset.js.map +1 -0
- package/proposals/queries.d.ts +4 -0
- package/proposals/queries.js +14 -0
- package/proposals/queries.js.map +1 -0
- package/{types/cr.d.ts → proposals/types.d.ts} +80 -5
- package/{types/cr.js → proposals/types.js} +72 -3
- package/proposals/types.js.map +1 -0
- package/types/index.d.ts +0 -1
- package/types/index.js +0 -13
- package/types/index.js.map +1 -1
- package/types/util.d.ts +1 -1
- package/types/util.js.map +1 -1
- package/types/views.d.ts +1 -1
- package/types/views.js.map +1 -1
- package/views/FilterCriteria/models.d.ts +2 -0
- package/views/FilterCriteria/models.js +12 -2
- package/views/FilterCriteria/models.js.map +1 -1
- package/views/GenericRelatedItemView.js +4 -4
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/RegisterStakeholder.d.ts +4 -1
- package/views/RegisterStakeholder.js +19 -13
- package/views/RegisterStakeholder.js.map +1 -1
- package/views/detail/ChangeRequest/index.js +12 -160
- package/views/detail/ChangeRequest/index.js.map +1 -1
- package/views/detail/ProposalWork.d.ts +8 -0
- package/views/detail/ProposalWork.js +213 -0
- package/views/detail/ProposalWork.js.map +1 -0
- package/views/detail/RegisterHome/ActiveProposalDetails.d.ts +1 -1
- package/views/detail/RegisterHome/ActiveProposalDetails.js +4 -4
- package/views/detail/RegisterHome/ActiveProposalDetails.js.map +1 -1
- package/views/detail/RegisterHome/Proposal.d.ts +1 -1
- package/views/detail/RegisterHome/Proposal.js +2 -6
- package/views/detail/RegisterHome/Proposal.js.map +1 -1
- package/views/detail/RegisterHome/index.js +12 -16
- package/views/detail/RegisterHome/index.js.map +1 -1
- package/views/detail/RegisterHome2/index.d.ts +5 -0
- package/views/detail/RegisterHome2/index.js +58 -0
- package/views/detail/RegisterHome2/index.js.map +1 -0
- package/views/detail/RegisterItem/index.d.ts +2 -1
- package/views/detail/RegisterItem/index.js +62 -21
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/detail/RegisterItemClass.js +1 -1
- package/views/detail/RegisterItemClass.js.map +1 -1
- package/views/detail/RegisterMeta/RegisterMetaForm.js +1 -46
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
- package/views/hooks/useLatestAcceptedProposal.d.ts +2 -0
- package/views/hooks/useLatestAcceptedProposal.js +48 -0
- package/views/hooks/useLatestAcceptedProposal.js.map +1 -0
- package/views/hooks/useRegisterVersion.d.ts +5 -0
- package/views/hooks/useRegisterVersion.js +47 -0
- package/views/hooks/useRegisterVersion.js.map +1 -0
- package/views/hooks/useSingleRegisterItemData.js.map +1 -1
- package/views/index.js +38 -16
- package/views/index.js.map +1 -1
- package/views/itemQueryUtils.d.ts +1 -1
- package/views/itemQueryUtils.js +12 -7
- package/views/itemQueryUtils.js.map +1 -1
- package/views/protocolRegistry.d.ts +1 -0
- package/views/protocolRegistry.js +4 -0
- package/views/protocolRegistry.js.map +1 -1
- package/views/sidebar/Browse/index.js +2 -2
- package/views/sidebar/Browse/index.js.map +1 -1
- package/views/sidebar/Registration/index.d.ts +0 -1
- package/views/sidebar/Registration/index.js +9 -37
- package/views/sidebar/Registration/index.js.map +1 -1
- package/views/sidebar/Search/index.d.ts +3 -0
- package/views/sidebar/Search/index.js +12 -11
- package/views/sidebar/Search/index.js.map +1 -1
- package/views/sidebar/index.js +40 -10
- package/views/sidebar/index.js.map +1 -1
- package/views/util.d.ts +6 -1
- package/views/util.js +30 -7
- package/views/util.js.map +1 -1
- package/types/cr.js.map +0 -1
- package/types/proposal.d.ts +0 -90
- package/types/proposal.js +0 -71
- package/types/proposal.js.map +0 -1
- package/views/ProposalHistoryDrawer.js.map +0 -1
- package/views/change-request/ChangeRequestContext.js.map +0 -1
- package/views/change-request/Proposals.d.ts +0 -40
- package/views/change-request/Proposals.js.map +0 -1
- package/views/change-request/Summary.js +0 -59
- package/views/change-request/Summary.js.map +0 -1
- package/views/change-request/TransitionHistory.js.map +0 -1
- package/views/change-request/TransitionOptions.js.map +0 -1
- package/views/change-request/objectChangeset.js.map +0 -1
- package/views/change-request/util.d.ts +0 -4
- package/views/change-request/util.js +0 -14
- package/views/change-request/util.js.map +0 -1
- /package/{views/ProposalHistoryDrawer.d.ts → proposals/HistoryDrawer.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Proposal.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/Proposal.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useState,\n useContext,\n useRef,\n useEffect,\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, MenuDivider, MenuItem,\n Spinner,\n NonIdealState,\n} from '@blueprintjs/core';\n\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { maybeEllipsizeString } from '../../util';\nimport type { Register } from '../../../types';\nimport { type SomeCR as CR } from '../../../types/cr';\n\n\nconst NewProposal: React.VoidFunctionComponent<{\n register: Register\n onCreateBlank?: (idea: string) => Promise<void>\n className?: string\n}> = function ({ register, 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={<>Propose a change to version {register.version?.id ?? '(N/A)'}:</>}>\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\n\n/**\n * A list of menu items for given actionable proposals,\n * grouped by label.\n */\nconst ActionableProposalItems: React.VoidFunctionComponent<{\n actionableProposals: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onSelect?: (proposalID: string) => void\n}> = function ActionableProposalItems ({ actionableProposals, onSelect }) {\n return <>{\n actionableProposals?.\n filter(([, proposals]) => proposals && proposals.length > 0).\n map(([groupLabel, proposals], idx) =>\n <React.Fragment key={idx}>\n <MenuDivider title={groupLabel} />\n {proposals !== undefined && proposals.length > 0\n ? proposals.map(cr =>\n <ActionableProposalItem\n key={cr.id}\n cr={cr}\n onClick={onSelect}\n />)\n : proposals === undefined\n ? <MenuItem disabled text=\"Loading…\" icon={<Spinner />} />\n : <MenuItem disabled text=\"No pending proposals\" icon=\"clean\" />}\n </React.Fragment>)\n }</>;\n};\n\n\nconst ActionableProposalItem: React.VoidFunctionComponent<{\n cr: CR\n onClick?: (crID: string) => void\n}> = function ({ cr, onClick }) {\n // TODO: Try to avoid useContext here.\n // Originally activeCR was passed via prop, need to try again.\n // Switch to context was done to avoid rerendering the entire list\n // & losing scroll position.\n // We want(?) active CR to determine if this item is active\n // and keep it in viewport after user switches back.\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n const selectedMenuItem = useRef<HTMLLIElement | null>(null);\n const isActive = activeCR && cr.id === activeCR?.id\n ? true\n : false;\n useEffect(() => {\n selectedMenuItem.current?.scrollIntoView?.({ block: 'nearest' });\n }, [isActive]);\n const handleClick = useCallback(() => {\n return onClick?.(cr.id);\n }, [onClick, cr.id]);\n return (\n <MenuItem\n key={cr.id}\n elementRef={isActive ? selectedMenuItem : undefined}\n selected={isActive}\n active={isActive}\n text={maybeEllipsizeString(cr.justification?.trim() || cr.id, 120)}\n htmlTitle={cr.justification}\n disabled={!onClick}\n onClick={onClick ? handleClick : undefined}\n />\n );\n};\n\n\nexport const Proposals: React.VoidFunctionComponent<{\n register: Register\n actionableProposals?: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onCreate?: (idea: string | false) => Promise<void>\n createMode?: boolean\n onSelectProposal?: (id: string) => void\n onRefreshProposals?: () => void\n className?: string\n}> = function ({\n register,\n actionableProposals,\n onCreate,\n createMode,\n onSelectProposal,\n onRefreshProposals,\n className,\n}) {\n //const [creating, setCreating] = useState(false);\n const hasActionable = (actionableProposals && actionableProposals.find(p => p[1] && p[1].length > 0));\n const proposalMenuItems = useMemo(() => {\n return hasActionable || onCreate\n ? <ActionableProposalItems\n actionableProposals={actionableProposals ?? []}\n onSelect={onSelectProposal}\n />\n : null;\n }, [onSelectProposal, onCreate, hasActionable, actionableProposals]);\n\n // return <Menu css={css`overflow-y: auto; background: none !important`} className={className}>\n // {proposalMenuItems}\n // </Menu>\n\n const stack: Panel<any>[] = useMemo(() => {\n const stack = [];\n const proposalMenu = proposalMenuItems\n ? <Menu css={css`overflow-y: auto; background: none !important;`}>\n {proposalMenuItems}\n </Menu>\n : null;\n if (proposalMenu) {\n stack.push({\n title: createMode\n ? \"Proposals\"\n : <>\n Proposals\n {hasActionable || (onCreate && onRefreshProposals)\n ? <>\n \n <Button\n minimal\n small\n onClick={onRefreshProposals}\n disabled={!onRefreshProposals}\n icon=\"refresh\"\n />\n </>\n : null}\n </>,\n renderPanel: () => proposalMenu,\n });\n }\n if (createMode) {\n stack.push({\n title: \"Start proposal\",\n renderPanel: () =>\n <NewProposal\n onCreateBlank={onCreate}\n register={register}\n css={css`padding: 5px;`}\n />,\n });\n }\n return stack;\n }, [\n onCreate, createMode,\n onRefreshProposals,\n hasActionable,\n register, proposalMenuItems,\n ]);\n\n return <PanelStack\n css={css`flex: 1; .bp4-panel-stack-view { background: none; }`}\n className={className}\n onClose={() => onCreate?.(false)}\n stack={stack.length > 0\n ? stack\n : [{ title: '', renderPanel: () => <NonIdealState title=\"Nothing to show\" /> }]}\n />;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Proposal.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/Proposal.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useState,\n useContext,\n useRef,\n useEffect,\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, MenuDivider, MenuItem,\n Spinner,\n NonIdealState,\n} from '@blueprintjs/core';\n\nimport { ChangeRequestContext } from '../../../proposals/ChangeRequestContext';\nimport { maybeEllipsizeString } from '../../util';\nimport type { Register } from '../../../types';\nimport { type SomeCR as CR } from '../../../proposals/types';\n\n\nconst NewProposal: React.VoidFunctionComponent<{\n register: Register\n onCreateBlank?: (idea: string) => Promise<void>\n className?: string\n}> = function ({ register, 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={<>Propose a change to version {register.version?.id ?? '(N/A)'}:</>}>\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\n\n/**\n * A list of menu items for given actionable proposals,\n * grouped by label.\n */\nconst ActionableProposalItems: React.VoidFunctionComponent<{\n actionableProposals: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onSelect?: (proposalID: string) => void\n}> = function ActionableProposalItems ({ actionableProposals, onSelect }) {\n return <>{\n actionableProposals?.\n filter(([, proposals]) => proposals && proposals.length > 0).\n map(([groupLabel, proposals], idx) =>\n <React.Fragment key={idx}>\n <MenuDivider title={groupLabel} />\n {proposals !== undefined && proposals.length > 0\n ? proposals.map(cr =>\n <ActionableProposalItem\n key={cr.id}\n cr={cr}\n onClick={onSelect}\n />)\n : proposals === undefined\n ? <MenuItem disabled text=\"Loading…\" icon={<Spinner />} />\n : <MenuItem disabled text=\"No pending proposals\" icon=\"clean\" />}\n </React.Fragment>)\n }</>;\n};\n\n\nconst ActionableProposalItem: React.VoidFunctionComponent<{\n cr: CR\n onClick?: (crID: string) => void\n}> = function ({ cr, onClick }) {\n // TODO: Try to avoid useContext here.\n // Originally activeCR was passed via prop, need to try again.\n // Switch to context was done to avoid rerendering the entire list\n // & losing scroll position.\n // We want(?) active CR to determine if this item is active\n // and keep it in viewport after user switches back.\n const { changeRequest: activeCR } = useContext(ChangeRequestContext);\n const selectedMenuItem = useRef<HTMLLIElement | null>(null);\n const isActive = activeCR && cr.id === activeCR?.id\n ? true\n : false;\n useEffect(() => {\n selectedMenuItem.current?.scrollIntoView?.({ block: 'nearest' });\n }, [isActive]);\n const handleClick = useCallback(() => {\n return onClick?.(cr.id);\n }, [onClick, cr.id]);\n return (\n <MenuItem\n key={cr.id}\n elementRef={isActive ? selectedMenuItem : undefined}\n selected={isActive}\n active={isActive}\n text={maybeEllipsizeString(cr.justification?.trim() || cr.id, 120)}\n htmlTitle={cr.justification}\n disabled={!onClick}\n onClick={onClick ? handleClick : undefined}\n />\n );\n};\n\n\nexport const Proposals: React.VoidFunctionComponent<{\n register: Register\n actionableProposals?: [groupLabel: JSX.Element | string, proposals: CR[] | undefined][]\n onCreate?: (idea: string | false) => Promise<void>\n createMode?: boolean\n onSelectProposal?: (id: string) => void\n onRefreshProposals?: () => void\n className?: string\n}> = function ({\n register,\n actionableProposals,\n onCreate,\n createMode,\n onSelectProposal,\n onRefreshProposals,\n className,\n}) {\n const hasActionable = (actionableProposals && actionableProposals.find(p => p[1] && p[1].length > 0));\n const proposalMenuItems = useMemo(() => {\n return hasActionable || onCreate\n ? <ActionableProposalItems\n actionableProposals={actionableProposals ?? []}\n onSelect={onSelectProposal}\n />\n : null;\n }, [onSelectProposal, onCreate, hasActionable, actionableProposals]);\n\n const stack: Panel<any>[] = useMemo(() => {\n const stack = [];\n const proposalMenu = proposalMenuItems\n ? <Menu css={css`overflow-y: auto; background: none !important;`}>\n {proposalMenuItems}\n </Menu>\n : null;\n if (proposalMenu) {\n stack.push({\n title: createMode\n ? \"Proposals\"\n : <>\n Proposals\n {hasActionable || (onCreate && onRefreshProposals)\n ? <>\n \n <Button\n minimal\n small\n onClick={onRefreshProposals}\n disabled={!onRefreshProposals}\n icon=\"refresh\"\n />\n </>\n : null}\n </>,\n renderPanel: () => proposalMenu,\n });\n }\n if (createMode) {\n stack.push({\n title: \"Start proposal\",\n renderPanel: () =>\n <NewProposal\n onCreateBlank={onCreate}\n register={register}\n css={css`padding: 5px;`}\n />,\n });\n }\n return stack;\n }, [\n onCreate, createMode,\n onRefreshProposals,\n hasActionable,\n register, proposalMenuItems,\n ]);\n\n return <PanelStack\n css={css`flex: 1; .bp4-panel-stack-view { background: none; }`}\n className={className}\n onClose={() => onCreate?.(false)}\n stack={stack.length > 0\n ? stack\n : [{ title: '', renderPanel: () => <NonIdealState title=\"Nothing to show\" /> }]}\n />;\n};\n"]}
|
|
@@ -19,17 +19,13 @@ var _context2 = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspac
|
|
|
19
19
|
|
|
20
20
|
var _BrowserCtx = require("../../BrowserCtx");
|
|
21
21
|
|
|
22
|
-
var _ChangeRequestContext = require("
|
|
22
|
+
var _ChangeRequestContext = require("../../../proposals/ChangeRequestContext");
|
|
23
23
|
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var _objectChangeset = require("../../change-request/objectChangeset");
|
|
24
|
+
var _proposals = require("../../../proposals");
|
|
27
25
|
|
|
28
|
-
var
|
|
26
|
+
var _types = require("../../../proposals/types");
|
|
29
27
|
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
var _queries = require("../../../proposals/actionableGroups/queries");
|
|
28
|
+
var _itemPathUtils = require("../../itemPathUtils");
|
|
33
29
|
|
|
34
30
|
var _stakeholder = require("../../../types/stakeholder");
|
|
35
31
|
|
|
@@ -91,15 +87,15 @@ const RegisterHome = function () {
|
|
|
91
87
|
} = (0, _react.useContext)(_context.DatasetContext);
|
|
92
88
|
const registerVersion = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.version;
|
|
93
89
|
const getNewEmptyCRChangeset = (0, _react.useMemo)(() => {
|
|
94
|
-
if (makeRandomID && stakeholder && (0, _stakeholder.canCreateCR)(stakeholder)) {
|
|
90
|
+
if (makeRandomID && stakeholder && (0, _stakeholder.canCreateCR)(stakeholder) && (registerVersion === null || registerVersion === void 0 ? void 0 : registerVersion.id)) {
|
|
95
91
|
return async function getNewEmptyCRChangeset(newIdea) {
|
|
96
92
|
const crID = await makeRandomID();
|
|
97
|
-
return [(0,
|
|
93
|
+
return [(0, _proposals.newCRObjectChangeset)(crID, newIdea, registerVersion.id, stakeholder.gitServerUsername), crID];
|
|
98
94
|
};
|
|
99
95
|
} else {
|
|
100
96
|
return undefined;
|
|
101
97
|
}
|
|
102
|
-
}, [makeRandomID, stakeholder, registerVersion]);
|
|
98
|
+
}, [makeRandomID, stakeholder, registerVersion === null || registerVersion === void 0 ? void 0 : registerVersion.id]);
|
|
103
99
|
const getImportedCRChangeset = (0, _react.useMemo)(() => {
|
|
104
100
|
if (requestFileFromFilesystem && stakeholder && (0, _stakeholder.canImportCR)(stakeholder)) {
|
|
105
101
|
return async function getImportedCRChangeset() {
|
|
@@ -116,9 +112,9 @@ const RegisterHome = function () {
|
|
|
116
112
|
throw new Error("No file was selected");
|
|
117
113
|
}
|
|
118
114
|
|
|
119
|
-
if ((0,
|
|
115
|
+
if ((0, _types.isImportableCR)(fileData)) {
|
|
120
116
|
try {
|
|
121
|
-
const [changeset, crID] = await (0,
|
|
117
|
+
const [changeset, crID] = await (0, _proposals.importedProposalToCRObjectChangeset)(fileData, itemClasses, stakeholder.gitServerUsername, getObjectData, async function resolvePredicates(predicates) {
|
|
122
118
|
const mapReduceChains = [...predicates.values()].map(predicate => ({
|
|
123
119
|
[predicate]: {
|
|
124
120
|
mapFunc: `
|
|
@@ -187,13 +183,13 @@ const RegisterHome = function () {
|
|
|
187
183
|
}
|
|
188
184
|
}, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]); // Actionable proposals v2
|
|
189
185
|
|
|
190
|
-
const proposalGroups = (0, _react.useMemo)(() => (stakeholder === null || stakeholder === void 0 ? void 0 : stakeholder.roles[0]) ? stakeholder.roles.flatMap(
|
|
186
|
+
const proposalGroups = (0, _react.useMemo)(() => (stakeholder === null || stakeholder === void 0 ? void 0 : stakeholder.roles[0]) ? stakeholder.roles.flatMap(_proposals.getActionableProposalGroupsForRole) : null, [stakeholder === null || stakeholder === void 0 ? void 0 : stakeholder.roles.join(',')]);
|
|
191
187
|
const actionableProposalsResult = useMapReducedData({
|
|
192
188
|
chains: (proposalGroups !== null && proposalGroups !== void 0 ? proposalGroups : []).map(([label,, queryGetter]) => {
|
|
193
189
|
const query = queryGetter(stakeholder);
|
|
194
190
|
const predicateFunc = `
|
|
195
191
|
const objPath = key, obj = value;
|
|
196
|
-
return ((${
|
|
192
|
+
return ((${_proposals.CR_BASE_QUERY}) && (${query}));
|
|
197
193
|
`;
|
|
198
194
|
const mapFunc = `emit(value);`;
|
|
199
195
|
return {
|
|
@@ -352,7 +348,7 @@ const RegisterHome = function () {
|
|
|
352
348
|
const [selectedProposal, selectProposal] = (0, _react.useState)(null);
|
|
353
349
|
const proposedChangeBlocks = (0, _react.useMemo)(() => {
|
|
354
350
|
if (activeCR) {
|
|
355
|
-
return (0, _react2.jsx)(
|
|
351
|
+
return (0, _react2.jsx)(_proposals.ProposalBrowser, {
|
|
356
352
|
proposals: activeCR.items,
|
|
357
353
|
selectedItem: selectedProposal,
|
|
358
354
|
onSelectItem: selectProposal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useMemo,\n useContext,\n useState,\n} from 'react';\n//import { Helmet } from 'react-helmet';\nimport styled from '@emotion/styled';\nimport { jsx, css } from '@emotion/react';\nimport { H5, H4, Colors, Tag, type MenuItemProps } from '@blueprintjs/core'\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { crIDToCRPath } from '../../itemPathUtils';\nimport { newCRObjectChangeset, importedProposalToCRObjectChangeset } from '../../change-request/objectChangeset';\nimport { Proposals as CRProposals } from '../../change-request/Proposals';\nimport { isImportableCR } from '../../../types/cr';\nimport { type SomeCR as CR } from '../../../types/cr';\nimport { getActionableProposalGroupsForRole, CR_BASE_QUERY } from '../../../proposals/actionableGroups/queries';\nimport { canImportCR, canCreateCR } from '../../../types/stakeholder';\nimport { itemPathToItemRef, itemRefToItemPath } from '../../itemPathUtils';\nimport { Protocols } from '../../protocolRegistry';\nimport MetaSummary from './MetaSummary';\nimport { TabContentsWithHeader } from '../../util';\nimport { Proposals as ProposalsBlock } from './Proposal';\nimport HomeBlock, { HomeBlockCard, HomeBlockActions } from './Block';\nimport CurrentProposalBlock from './ActiveProposalDetails';\nimport ItemSearchDrawer from '../../ItemSearchDrawer';\n\n\nconst RegisterHome: React.VoidFunctionComponent<Record<never, never>> =\nfunction () {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const {\n registerMetadata, stakeholder,\n itemClasses,\n itemClassGroups,\n setActiveChangeRequestID,\n jumpTo,\n } = useContext(BrowserCtx);\n const {\n changeRequest: activeCR,\n canEdit: activeCRIsEditable,\n proposeBlankItem,\n canDelete,\n deleteCR,\n updateItemProposal,\n } = useContext(ChangeRequestContext);\n const {\n requestFileFromFilesystem,\n makeRandomID,\n getObjectData,\n updateObjects,\n performOperation,\n isBusy,\n getMapReducedData,\n useMapReducedData,\n } = useContext(DatasetContext);\n\n const registerVersion = registerMetadata?.version;\n\n const getNewEmptyCRChangeset:\n undefined | ((idea: string) => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (makeRandomID && stakeholder && canCreateCR(stakeholder)) {\n return async function getNewEmptyCRChangeset (newIdea: string) {\n const crID = await makeRandomID();\n return [newCRObjectChangeset(\n crID,\n newIdea,\n registerVersion!,\n stakeholder!.gitServerUsername!,\n ), crID];\n };\n } else {\n return undefined;\n }\n }, [makeRandomID, stakeholder, registerVersion]);\n\n const getImportedCRChangeset:\n undefined | (() => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (requestFileFromFilesystem && stakeholder && canImportCR(stakeholder)) {\n return async function getImportedCRChangeset() {\n const data = await requestFileFromFilesystem({\n prompt: \"Select one register proposal JSON file\",\n filters: [\n { name: \"JSON files\", extensions: ['.json'] },\n ],\n });\n const fileData = Object.values(data)[0]!;\n if (!fileData) {\n throw new Error(\"No file was selected\");\n }\n if (isImportableCR(fileData)) {\n try {\n const [changeset, crID] = await importedProposalToCRObjectChangeset(\n fileData,\n itemClasses,\n stakeholder!.gitServerUsername!,\n getObjectData,\n async function resolvePredicates(predicates) {\n const mapReduceChains = [...predicates.values()].map(predicate => ({\n [predicate]: {\n mapFunc: `\n const data = value.data;\n if (!key.startsWith('/proposals/') && data && (${predicate})) {\n emit({ objectPath: key, objectData: value });\n }\n `,\n },\n })).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n\n const result:\n Record<string, { objectPath: string, objectData: any }[] | {}> =\n await getMapReducedData({\n chains: mapReduceChains,\n });\n\n return Object.entries(result).map(([chainLabel, chainResult]) => {\n const objects =\n // Map returns an empty object if there’re no items,\n // but we promise to return a list.\n (Array.isArray(chainResult) ? chainResult : []);\n if (objects.length < 1) {\n throw new Error(`Unable to resolve predicate to item UUID: no item found matching predicate ${chainLabel}`);\n } else if (objects.length > 1) {\n const objectOverview = objects.map((o: any) => JSON.stringify(o)).join(', ')\n throw new Error(`Unable to resolve predicate to item UUID: more than one item matches predicate ${chainLabel}: ${objectOverview}`);\n } else {\n return {\n // There’s just one item anyway, hence `objects[0]`.\n [chainLabel]: itemPathToItemRef(false, objects[0].objectPath),\n };\n }\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n },\n );\n return [changeset, crID];\n } catch (e) {\n console.error(\"Error reading proposal data\", e);\n throw new Error(\"Error reading proposal data\");\n }\n } else {\n throw new Error(\"Invalid proposal format\");\n }\n }\n } else {\n return undefined;\n }\n }, [getMapReducedData, requestFileFromFilesystem, getObjectData, stakeholder]);\n\n const [importCR, createCR] = useMemo(() => {\n if (updateObjects && setActiveChangeRequestID && !isBusy) {\n return [\n getImportedCRChangeset\n ? performOperation('importing proposal', async function () {\n const [objectChangeset, crID] = await getImportedCRChangeset(); \n await updateObjects({\n commitMessage: 'import proposal',\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n getNewEmptyCRChangeset\n ? performOperation('creating blank proposal', async function (newIdea: string) {\n const [objectChangeset, crID] = await getNewEmptyCRChangeset(newIdea);\n await updateObjects({\n commitMessage: `start new empty proposal ${newIdea}`,\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n ];\n } else {\n return [undefined, undefined];\n }\n }, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]);\n\n // Actionable proposals v2\n const proposalGroups = useMemo(\n (() => stakeholder?.roles[0]\n ? stakeholder.roles.flatMap(getActionableProposalGroupsForRole)\n : null),\n [stakeholder?.roles.join(',')]);\n\n const actionableProposalsResult = useMapReducedData({\n chains:\n (proposalGroups ?? []).\n map(([label, , queryGetter]) => {\n const query = queryGetter(stakeholder);\n const predicateFunc = `\n const objPath = key, obj = value;\n return ((${CR_BASE_QUERY}) && (${query}));\n `;\n const mapFunc = `emit(value);`;\n return { [label]: { mapFunc, predicateFunc } };\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {}),\n });\n\n const actionableProposals: [string, CR[] | undefined][] = useMemo(\n (() =>\n Object.entries(actionableProposalsResult.value).\n map(([chainID, chainResult]) =>\n [\n chainID,\n (Array.isArray(chainResult)\n ? (chainResult as CR[])\n : undefined) || undefined\n ]\n )\n ),\n [actionableProposalsResult.value]);\n\n const handleRefreshProposals = actionableProposalsResult.refresh;\n\n // TODO: Move to action bar\n // const customActions = useMemo(() => customViews.map(cv => ({\n // key: cv.id,\n // text: cv.label,\n // title: cv.description,\n // icon: cv.icon,\n // onClick: () => spawnTab(`${Protocols.CUSTOM_VIEW}:${cv.id}/index`),\n // })), [spawnTab, customViews]);\n\n const [createMode, setCreateMode] = useState(false);\n //const canStakeholderCreateCRs = stakeholder && canCreateCR(stakeholder);\n const handleSelectProposal = useMemo(() => {\n return (setActiveChangeRequestID && !isBusy\n ? function (crid: string) { setActiveChangeRequestID?.(crid) }\n : undefined);\n }, [setActiveChangeRequestID, isBusy]);\n\n const proposalBlockActions = useMemo(() => {\n const actions = [];\n if (activeCR) {\n actions.push({\n text: \"Export proposal\",\n onClick: () => void 0,\n icon: 'export',\n disabled: true,\n } as const);\n actions.push({\n text: \"Exit proposal\",\n icon: 'log-out',\n intent: 'danger',\n disabled: isBusy,\n onClick: setActiveChangeRequestID\n ? () => setActiveChangeRequestID?.(null)\n : undefined,\n } as const);\n } else {\n if (stakeholder && canCreateCR(stakeholder)) {\n actions.push({\n text: \"Create blank proposal\",\n onClick: !createMode ? (() => setCreateMode(true)) : undefined,\n disabled: !createCR,\n active: createMode,\n selected: createMode,\n icon: 'add',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n if (stakeholder && canImportCR(stakeholder)) {\n actions.push({\n text: \"Import proposal\",\n onClick: importCR,\n disabled: !importCR || createMode,\n icon: 'import',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n }\n return actions;\n }, [!activeCR, createMode, importCR, createCR, isBusy, actionableProposals.length < 1]);\n\n const handleCreate = useMemo((() =>\n createCR && createMode\n ? async function (idea: string | false) {\n if (idea && createCR) {\n await createCR(idea);\n }\n setCreateMode(false);\n }\n : undefined\n ), [createMode, createCR]);\n\n const proposalBlock = useMemo(() => {\n if (registerMetadata && (createCR || (actionableProposals ?? []).find(p => p[1] && p[1].length > 0))) {\n return (\n <HomeBlock\n View={ProposalsBlock}\n key=\"proposal dashboard\"\n description=\"Actionable proposals\"\n css={css`\n height: 300px;\n flex-basis: calc(50% - 10px);\n flex-grow: 1;\n `}\n props={{\n register: registerMetadata,\n actionableProposals,\n createMode,\n onCreate: handleCreate,\n onRefreshProposals: handleRefreshProposals,\n onSelectProposal: handleSelectProposal,\n }}\n actions={proposalBlockActions}\n />\n );\n } else {\n return null;\n }\n }, [\n createMode, registerMetadata,\n proposalBlockActions,\n handleSelectProposal,\n handleCreate,\n createCR,\n handleRefreshProposals,\n actionableProposals,\n ]);\n\n const handleOpenProposal = useMemo(() => {\n return activeCR\n ? (async () => spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(activeCR.id)}`))\n : undefined;\n }, [spawnTab, activeCR?.id]);\n\n const activeCRBlock = useMemo(() => {\n if (activeCR && registerMetadata) {\n return <CurrentProposalBlock\n proposal={activeCR}\n stakeholder={stakeholder}\n register={registerMetadata}\n onOpen={handleOpenProposal}\n onDelete={deleteCR}\n canDelete={canDelete}\n css={css`\n height: 300px;\n flex-basis: calc(50% - ${itemGapPx}px);\n flex-grow: 1;\n `}\n />\n } else {\n return null;\n }\n }, [activeCR, registerMetadata, canDelete, deleteCR, handleOpenProposal, stakeholder]);\n\n const registerMetaBlock = useMemo(() => {\n if (!activeCRBlock) {\n return (\n <HomeBlock\n View={MetaSummary}\n description=\"Register summary\"\n props={registerMetadata\n ? {\n register: registerMetadata,\n style: { padding: '10px 12px 0 12px', flexGrow: 1, overflowY: 'auto' },\n }\n : registerMetadata}\n error={registerMetadata === null\n ? \"Failed to load register metadata\"\n : undefined}\n css={css`\n height: 300px;\n flex-basis: calc(50% - ${itemGapPx}px);\n flex-grow: 1;\n `}\n actions={[{\n text: \"View or edit register metadata\",\n onClick: () => spawnTab(Protocols.REGISTER_META),\n icon: 'properties',\n }]}\n />\n );\n } else {\n return null;\n }\n }, [!activeCRBlock, registerMetadata]);\n\n const [selectedProposal, selectProposal] = useState<string | null>(null);\n const proposedChangeBlocks = useMemo(() => {\n if (activeCR) {\n return (\n <CRProposals\n proposals={activeCR.items}\n selectedItem={selectedProposal}\n onSelectItem={selectProposal}\n onDeleteProposalForItemAtPath={updateItemProposal\n ? (path) => updateItemProposal(\"delete item from proposal draft\", null, path)\n : undefined}\n />\n );\n } else {\n return null;\n }\n }, [activeCR, selectedProposal, selectProposal, updateItemProposal]);\n\n const [activeItemSelector, activateItemSelector] =\n useState<keyof typeof itemClasses | true | null>(null);\n\n const handleProposeNew = proposeBlankItem\n ? async function handleProposeNew(clsID: string) {\n const itemRef = await proposeBlankItem(clsID);\n selectProposal(itemRefToItemPath(itemRef));\n }\n : null;\n \n\n const itemSelectorBlocks = useMemo(() => {\n const groups = itemClassGroups\n ? itemClassGroups\n : { '': Object.keys(itemClasses) };\n return (\n <>\n {Object.entries(groups).map(([groupLabel, clsIDs]) =>\n <>\n {groupLabel\n ? <GridHeader>{groupLabel}:</GridHeader>\n : null}\n {clsIDs.map((clsID: string) => {\n const cls = itemClasses[clsID];\n const actions: MenuItemProps[] = [{\n onClick: () => spawnTab(`${Protocols.ITEM_CLASS}:${clsID}`),\n icon: 'search',\n text: \"Find item…\",\n selected: activeItemSelector === clsID,\n }];\n if (activeCRIsEditable && handleProposeNew) {\n actions.push({\n onClick: () => handleProposeNew(clsID),\n icon: 'add',\n text: \"Propose new\",\n intent: 'primary',\n });\n }\n return <HomeBlockCard\n key={clsID}\n css={css`flex-basis: calc(25% - 10px*3/4); flex-shrink: 0;`}\n description={`Search items of class ${cls?.meta.title ?? clsID}`}>\n <Tag minimal>Class</Tag>\n <div css={css`padding: 5px; flex-grow: 1;`}>\n <H5 css={css`margin: 0;`}>{cls.meta.title}</H5>\n {cls\n ? cls.meta.description && cls.meta.description !== cls.meta.title\n ? <p css={css`margin: 10px 0 0 0;`}>\n {cls.meta.description ?? \"(no description)\"}\n </p>\n : null\n : \"(no class information available)\"}\n </div>\n <HomeBlockActions actions={actions} />\n </HomeBlockCard>\n })}\n </>\n )}\n\n <ItemSearchDrawer\n isOpen={jumpTo && activeItemSelector ? true : false}\n onClose={() => activateItemSelector(null)}\n availableClassIDs={typeof activeItemSelector === 'string' ? [activeItemSelector] : []}\n onChooseItem={(itemRef) => jumpTo?.(`itemdetails:${itemRefToItemPath(itemRef)}`)}\n />\n </>\n );\n }, [itemClasses, activeItemSelector, activeCRIsEditable, jumpTo]);\n\n return (\n <TabContentsWithHeader\n title={<></>}\n layoutOptions={{ gapPx: itemGapPx, stretch: true }}\n layout=\"card-grid\">\n\n {activeCRBlock ?? registerMetaBlock}\n\n {proposalBlock}\n\n {proposedChangeBlocks\n ? <GridHeader>\n Proposed Changes: ({Object.keys(activeCR?.items ?? []).length} total)\n </GridHeader>\n : null}\n\n {proposedChangeBlocks}\n\n {!itemClassGroups\n ? <GridHeader>\n Register Items:\n </GridHeader>\n : null}\n\n {itemSelectorBlocks}\n\n {/* TODO: Move to action bar customActions.length > 0\n ? <HomeBlock\n description=\"Custom actions\"\n View={() => <></>}\n props={{}}\n actions={customActions}\n />\n : null*/}\n\n </TabContentsWithHeader>\n );\n}\n\nconst GridHeader = styled(H4)`\n flex: 100%;\n margin-top: 10px;\n padding-left: 10px;\n color: ${Colors.GRAY2};\n .bp4-dark & {\n color: ${Colors.GRAY2};\n }\n`;\n\nconst itemGapPx = 10;\n\nexport default RegisterHome;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/detail/RegisterHome/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, {\n useMemo,\n useContext,\n useState,\n} from 'react';\n//import { Helmet } from 'react-helmet';\nimport styled from '@emotion/styled';\nimport { jsx, css } from '@emotion/react';\nimport { H5, H4, Colors, Tag, type MenuItemProps } from '@blueprintjs/core'\nimport type { ObjectChangeset } from '@riboseinc/paneron-extension-kit/types/objects';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { ChangeRequestContext } from '../../../proposals/ChangeRequestContext';\nimport {\n newCRObjectChangeset,\n importedProposalToCRObjectChangeset,\n ProposalBrowser,\n getActionableProposalGroupsForRole,\n CR_BASE_QUERY,\n} from '../../../proposals';\nimport { isImportableCR, type SomeCR as CR } from '../../../proposals/types';\nimport { crIDToCRPath } from '../../itemPathUtils';\n\nimport { canImportCR, canCreateCR } from '../../../types/stakeholder';\nimport { itemPathToItemRef, itemRefToItemPath } from '../../itemPathUtils';\nimport { Protocols } from '../../protocolRegistry';\nimport MetaSummary from './MetaSummary';\nimport { TabContentsWithHeader } from '../../util';\nimport { Proposals as ProposalsBlock } from './Proposal';\nimport HomeBlock, { HomeBlockCard, HomeBlockActions } from './Block';\nimport CurrentProposalBlock from './ActiveProposalDetails';\nimport ItemSearchDrawer from '../../ItemSearchDrawer';\n\n\nconst RegisterHome: React.VoidFunctionComponent<Record<never, never>> =\nfunction () {\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const {\n registerMetadata, stakeholder,\n itemClasses,\n itemClassGroups,\n setActiveChangeRequestID,\n jumpTo,\n } = useContext(BrowserCtx);\n const {\n changeRequest: activeCR,\n canEdit: activeCRIsEditable,\n proposeBlankItem,\n canDelete,\n deleteCR,\n updateItemProposal,\n } = useContext(ChangeRequestContext);\n const {\n requestFileFromFilesystem,\n makeRandomID,\n getObjectData,\n updateObjects,\n performOperation,\n isBusy,\n getMapReducedData,\n useMapReducedData,\n } = useContext(DatasetContext);\n\n const registerVersion = registerMetadata?.version;\n\n const getNewEmptyCRChangeset:\n undefined | ((idea: string) => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (makeRandomID && stakeholder && canCreateCR(stakeholder) && registerVersion?.id) {\n return async function getNewEmptyCRChangeset (newIdea: string) {\n const crID = await makeRandomID();\n return [newCRObjectChangeset(\n crID,\n newIdea,\n registerVersion!.id,\n stakeholder!.gitServerUsername!,\n ), crID];\n };\n } else {\n return undefined;\n }\n }, [makeRandomID, stakeholder, registerVersion?.id]);\n\n const getImportedCRChangeset:\n undefined | (() => Promise<[ObjectChangeset, string]>) =\n useMemo(() => {\n if (requestFileFromFilesystem && stakeholder && canImportCR(stakeholder)) {\n return async function getImportedCRChangeset() {\n const data = await requestFileFromFilesystem({\n prompt: \"Select one register proposal JSON file\",\n filters: [\n { name: \"JSON files\", extensions: ['.json'] },\n ],\n });\n const fileData = Object.values(data)[0]!;\n if (!fileData) {\n throw new Error(\"No file was selected\");\n }\n if (isImportableCR(fileData)) {\n try {\n const [changeset, crID] = await importedProposalToCRObjectChangeset(\n fileData,\n itemClasses,\n stakeholder!.gitServerUsername!,\n getObjectData,\n async function resolvePredicates(predicates) {\n const mapReduceChains = [...predicates.values()].map(predicate => ({\n [predicate]: {\n mapFunc: `\n const data = value.data;\n if (!key.startsWith('/proposals/') && data && (${predicate})) {\n emit({ objectPath: key, objectData: value });\n }\n `,\n },\n })).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n\n const result:\n Record<string, { objectPath: string, objectData: any }[] | {}> =\n await getMapReducedData({\n chains: mapReduceChains,\n });\n\n return Object.entries(result).map(([chainLabel, chainResult]) => {\n const objects =\n // Map returns an empty object if there’re no items,\n // but we promise to return a list.\n (Array.isArray(chainResult) ? chainResult : []);\n if (objects.length < 1) {\n throw new Error(`Unable to resolve predicate to item UUID: no item found matching predicate ${chainLabel}`);\n } else if (objects.length > 1) {\n const objectOverview = objects.map((o: any) => JSON.stringify(o)).join(', ')\n throw new Error(`Unable to resolve predicate to item UUID: more than one item matches predicate ${chainLabel}: ${objectOverview}`);\n } else {\n return {\n // There’s just one item anyway, hence `objects[0]`.\n [chainLabel]: itemPathToItemRef(false, objects[0].objectPath),\n };\n }\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {});\n },\n );\n return [changeset, crID];\n } catch (e) {\n console.error(\"Error reading proposal data\", e);\n throw new Error(\"Error reading proposal data\");\n }\n } else {\n throw new Error(\"Invalid proposal format\");\n }\n }\n } else {\n return undefined;\n }\n }, [getMapReducedData, requestFileFromFilesystem, getObjectData, stakeholder]);\n\n const [importCR, createCR] = useMemo(() => {\n if (updateObjects && setActiveChangeRequestID && !isBusy) {\n return [\n getImportedCRChangeset\n ? performOperation('importing proposal', async function () {\n const [objectChangeset, crID] = await getImportedCRChangeset(); \n await updateObjects({\n commitMessage: 'import proposal',\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n getNewEmptyCRChangeset\n ? performOperation('creating blank proposal', async function (newIdea: string) {\n const [objectChangeset, crID] = await getNewEmptyCRChangeset(newIdea);\n await updateObjects({\n commitMessage: `start new empty proposal ${newIdea}`,\n objectChangeset,\n });\n setActiveChangeRequestID(crID);\n })\n : undefined,\n ];\n } else {\n return [undefined, undefined];\n }\n }, [isBusy, performOperation, updateObjects, getImportedCRChangeset, getNewEmptyCRChangeset]);\n\n // Actionable proposals v2\n const proposalGroups = useMemo(\n (() => stakeholder?.roles[0]\n ? stakeholder.roles.flatMap(getActionableProposalGroupsForRole)\n : null),\n [stakeholder?.roles.join(',')]);\n\n const actionableProposalsResult = useMapReducedData({\n chains:\n (proposalGroups ?? []).\n map(([label, , queryGetter]) => {\n const query = queryGetter(stakeholder);\n const predicateFunc = `\n const objPath = key, obj = value;\n return ((${CR_BASE_QUERY}) && (${query}));\n `;\n const mapFunc = `emit(value);`;\n return { [label]: { mapFunc, predicateFunc } };\n }).reduce((prev, curr) => ({ ...prev, ...curr }), {}),\n });\n\n const actionableProposals: [string, CR[] | undefined][] = useMemo(\n (() =>\n Object.entries(actionableProposalsResult.value).\n map(([chainID, chainResult]) =>\n [\n chainID,\n (Array.isArray(chainResult)\n ? (chainResult as CR[])\n : undefined) || undefined\n ]\n )\n ),\n [actionableProposalsResult.value]);\n\n const handleRefreshProposals = actionableProposalsResult.refresh;\n\n // TODO: Move to action bar\n // const customActions = useMemo(() => customViews.map(cv => ({\n // key: cv.id,\n // text: cv.label,\n // title: cv.description,\n // icon: cv.icon,\n // onClick: () => spawnTab(`${Protocols.CUSTOM_VIEW}:${cv.id}/index`),\n // })), [spawnTab, customViews]);\n\n const [createMode, setCreateMode] = useState(false);\n //const canStakeholderCreateCRs = stakeholder && canCreateCR(stakeholder);\n const handleSelectProposal = useMemo(() => {\n return (setActiveChangeRequestID && !isBusy\n ? function (crid: string) { setActiveChangeRequestID?.(crid) }\n : undefined);\n }, [setActiveChangeRequestID, isBusy]);\n\n const proposalBlockActions = useMemo(() => {\n const actions = [];\n if (activeCR) {\n actions.push({\n text: \"Export proposal\",\n onClick: () => void 0,\n icon: 'export',\n disabled: true,\n } as const);\n actions.push({\n text: \"Exit proposal\",\n icon: 'log-out',\n intent: 'danger',\n disabled: isBusy,\n onClick: setActiveChangeRequestID\n ? () => setActiveChangeRequestID?.(null)\n : undefined,\n } as const);\n } else {\n if (stakeholder && canCreateCR(stakeholder)) {\n actions.push({\n text: \"Create blank proposal\",\n onClick: !createMode ? (() => setCreateMode(true)) : undefined,\n disabled: !createCR,\n active: createMode,\n selected: createMode,\n icon: 'add',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n if (stakeholder && canImportCR(stakeholder)) {\n actions.push({\n text: \"Import proposal\",\n onClick: importCR,\n disabled: !importCR || createMode,\n icon: 'import',\n intent: actionableProposals.length < 1\n ? 'primary'\n : undefined,\n } as const);\n }\n }\n return actions;\n }, [!activeCR, createMode, importCR, createCR, isBusy, actionableProposals.length < 1]);\n\n const handleCreate = useMemo((() =>\n createCR && createMode\n ? async function (idea: string | false) {\n if (idea && createCR) {\n await createCR(idea);\n }\n setCreateMode(false);\n }\n : undefined\n ), [createMode, createCR]);\n\n const proposalBlock = useMemo(() => {\n if (registerMetadata && (createCR || (actionableProposals ?? []).find(p => p[1] && p[1].length > 0))) {\n return (\n <HomeBlock\n View={ProposalsBlock}\n key=\"proposal dashboard\"\n description=\"Actionable proposals\"\n css={css`\n height: 300px;\n flex-basis: calc(50% - 10px);\n flex-grow: 1;\n `}\n props={{\n register: registerMetadata,\n actionableProposals,\n createMode,\n onCreate: handleCreate,\n onRefreshProposals: handleRefreshProposals,\n onSelectProposal: handleSelectProposal,\n }}\n actions={proposalBlockActions}\n />\n );\n } else {\n return null;\n }\n }, [\n createMode, registerMetadata,\n proposalBlockActions,\n handleSelectProposal,\n handleCreate,\n createCR,\n handleRefreshProposals,\n actionableProposals,\n ]);\n\n const handleOpenProposal = useMemo(() => {\n return activeCR\n ? (async () => spawnTab(`${Protocols.CHANGE_REQUEST}:${crIDToCRPath(activeCR.id)}`))\n : undefined;\n }, [spawnTab, activeCR?.id]);\n\n const activeCRBlock = useMemo(() => {\n if (activeCR && registerMetadata) {\n return <CurrentProposalBlock\n proposal={activeCR}\n stakeholder={stakeholder}\n register={registerMetadata}\n onOpen={handleOpenProposal}\n onDelete={deleteCR}\n canDelete={canDelete}\n css={css`\n height: 300px;\n flex-basis: calc(50% - ${itemGapPx}px);\n flex-grow: 1;\n `}\n />\n } else {\n return null;\n }\n }, [activeCR, registerMetadata, canDelete, deleteCR, handleOpenProposal, stakeholder]);\n\n const registerMetaBlock = useMemo(() => {\n if (!activeCRBlock) {\n return (\n <HomeBlock\n View={MetaSummary}\n description=\"Register summary\"\n props={registerMetadata\n ? {\n register: registerMetadata,\n style: { padding: '10px 12px 0 12px', flexGrow: 1, overflowY: 'auto' },\n }\n : registerMetadata}\n error={registerMetadata === null\n ? \"Failed to load register metadata\"\n : undefined}\n css={css`\n height: 300px;\n flex-basis: calc(50% - ${itemGapPx}px);\n flex-grow: 1;\n `}\n actions={[{\n text: \"View or edit register metadata\",\n onClick: () => spawnTab(Protocols.REGISTER_META),\n icon: 'properties',\n }]}\n />\n );\n } else {\n return null;\n }\n }, [!activeCRBlock, registerMetadata]);\n\n const [selectedProposal, selectProposal] = useState<string | null>(null);\n const proposedChangeBlocks = useMemo(() => {\n if (activeCR) {\n return (\n <ProposalBrowser\n proposals={activeCR.items}\n selectedItem={selectedProposal}\n onSelectItem={selectProposal}\n onDeleteProposalForItemAtPath={updateItemProposal\n ? (path) => updateItemProposal(\"delete item from proposal draft\", null, path)\n : undefined}\n />\n );\n } else {\n return null;\n }\n }, [activeCR, selectedProposal, selectProposal, updateItemProposal]);\n\n const [activeItemSelector, activateItemSelector] =\n useState<keyof typeof itemClasses | true | null>(null);\n\n const handleProposeNew = proposeBlankItem\n ? async function handleProposeNew(clsID: string) {\n const itemRef = await proposeBlankItem(clsID);\n selectProposal(itemRefToItemPath(itemRef));\n }\n : null;\n \n\n const itemSelectorBlocks = useMemo(() => {\n const groups = itemClassGroups\n ? itemClassGroups\n : { '': Object.keys(itemClasses) };\n return (\n <>\n {Object.entries(groups).map(([groupLabel, clsIDs]) =>\n <>\n {groupLabel\n ? <GridHeader>{groupLabel}:</GridHeader>\n : null}\n {clsIDs.map((clsID: string) => {\n const cls = itemClasses[clsID];\n const actions: MenuItemProps[] = [{\n onClick: () => spawnTab(`${Protocols.ITEM_CLASS}:${clsID}`),\n icon: 'search',\n text: \"Find item…\",\n selected: activeItemSelector === clsID,\n }];\n if (activeCRIsEditable && handleProposeNew) {\n actions.push({\n onClick: () => handleProposeNew(clsID),\n icon: 'add',\n text: \"Propose new\",\n intent: 'primary',\n });\n }\n return <HomeBlockCard\n key={clsID}\n css={css`flex-basis: calc(25% - 10px*3/4); flex-shrink: 0;`}\n description={`Search items of class ${cls?.meta.title ?? clsID}`}>\n <Tag minimal>Class</Tag>\n <div css={css`padding: 5px; flex-grow: 1;`}>\n <H5 css={css`margin: 0;`}>{cls.meta.title}</H5>\n {cls\n ? cls.meta.description && cls.meta.description !== cls.meta.title\n ? <p css={css`margin: 10px 0 0 0;`}>\n {cls.meta.description ?? \"(no description)\"}\n </p>\n : null\n : \"(no class information available)\"}\n </div>\n <HomeBlockActions actions={actions} />\n </HomeBlockCard>\n })}\n </>\n )}\n\n <ItemSearchDrawer\n isOpen={jumpTo && activeItemSelector ? true : false}\n onClose={() => activateItemSelector(null)}\n availableClassIDs={typeof activeItemSelector === 'string' ? [activeItemSelector] : []}\n onChooseItem={(itemRef) => jumpTo?.(`itemdetails:${itemRefToItemPath(itemRef)}`)}\n />\n </>\n );\n }, [itemClasses, activeItemSelector, activeCRIsEditable, jumpTo]);\n\n return (\n <TabContentsWithHeader\n title={<></>}\n layoutOptions={{ gapPx: itemGapPx, stretch: true }}\n layout=\"card-grid\">\n\n {activeCRBlock ?? registerMetaBlock}\n\n {proposalBlock}\n\n {proposedChangeBlocks\n ? <GridHeader>\n Proposed Changes: ({Object.keys(activeCR?.items ?? []).length} total)\n </GridHeader>\n : null}\n\n {proposedChangeBlocks}\n\n {!itemClassGroups\n ? <GridHeader>\n Register Items:\n </GridHeader>\n : null}\n\n {itemSelectorBlocks}\n\n {/* TODO: Move to action bar customActions.length > 0\n ? <HomeBlock\n description=\"Custom actions\"\n View={() => <></>}\n props={{}}\n actions={customActions}\n />\n : null*/}\n\n </TabContentsWithHeader>\n );\n}\n\nconst GridHeader = styled(H4)`\n flex: 100%;\n margin-top: 10px;\n padding-left: 10px;\n color: ${Colors.GRAY2};\n .bp4-dark & {\n color: ${Colors.GRAY2};\n }\n`;\n\nconst itemGapPx = 10;\n\nexport default RegisterHome;\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _react2 = require("@emotion/react");
|
|
11
|
+
|
|
12
|
+
var _core = require("@blueprintjs/core");
|
|
13
|
+
|
|
14
|
+
var _context = require("@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context");
|
|
15
|
+
|
|
16
|
+
var _util = require("../../util");
|
|
17
|
+
|
|
18
|
+
var _BrowserCtx = require("../../BrowserCtx");
|
|
19
|
+
|
|
20
|
+
var _Search = _interopRequireDefault(require("../../sidebar/Search"));
|
|
21
|
+
|
|
22
|
+
var _protocolRegistry = require("../../protocolRegistry");
|
|
23
|
+
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
+
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
+
|
|
28
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
+
|
|
30
|
+
/** @jsx jsx */
|
|
31
|
+
|
|
32
|
+
/** @jsxFrag React.Fragment */
|
|
33
|
+
const RegisterHome2 = function () {
|
|
34
|
+
var _a;
|
|
35
|
+
|
|
36
|
+
const {
|
|
37
|
+
registerMetadata
|
|
38
|
+
} = (0, _react.useContext)(_BrowserCtx.BrowserCtx);
|
|
39
|
+
const {
|
|
40
|
+
spawnTab
|
|
41
|
+
} = (0, _react.useContext)(_context.TabbedWorkspaceContext);
|
|
42
|
+
return (0, _react2.jsx)(_util.TabContentsWithHeader, {
|
|
43
|
+
title: (0, _react2.jsx)(_react.default.Fragment, null, "Welcome to ", (_a = registerMetadata === null || registerMetadata === void 0 ? void 0 : registerMetadata.name) !== null && _a !== void 0 ? _a : 'this register')
|
|
44
|
+
}, (0, _react2.jsx)(_core.Card, {
|
|
45
|
+
css: (0, _react2.css)`flex: 1; box-shadow: none !important; position: absolute; border-radius: 0; display: flex; flex-flow: column nowrap; padding: 10px;`
|
|
46
|
+
}, (0, _react2.jsx)("p", null, (0, _react2.jsx)(_core.Button, {
|
|
47
|
+
css: (0, _react2.css)`vertical-align: baseline`,
|
|
48
|
+
onClick: () => spawnTab(_protocolRegistry.Protocols.REGISTER_META)
|
|
49
|
+
}, "Learn more about the register"), "\u2002 or search all items:"), (0, _react2.jsx)(_Search.default, {
|
|
50
|
+
css: (0, _react2.css)`flex: 1;`,
|
|
51
|
+
//style={{ height: '100vh', width: '50vw', minWidth: '500px', maxWidth: '90vw' }}
|
|
52
|
+
availableClassIDs: [],
|
|
53
|
+
stateName: "item-search-global"
|
|
54
|
+
})));
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
var _default = RegisterHome2;
|
|
58
|
+
exports.default = _default;
|
|
@@ -0,0 +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,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEjD,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;gBACE,IAAC,MAAM,IACH,GAAG,EAAE,GAAG,CAAA,0BAA0B,EAClC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,oCAE3C;8CAGP;YACJ,IAAC,MAAM,IACL,GAAG,EAAE,GAAG,CAAA,UAAU;gBAClB,iFAAiF;gBACjF,iBAAiB,EAAE,EAAE,EACrB,SAAS,EAAC,oBAAoB,GAE9B,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 { 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 <Button\n css={css`vertical-align: baseline`}\n onClick={() => spawnTab(Protocols.REGISTER_META)}>\n Learn more about the register\n </Button>\n  \n or search all items:\n </p>\n <Search\n css={css`flex: 1;`}\n //style={{ height: '100vh', width: '50vw', minWidth: '500px', maxWidth: '90vw' }}\n availableClassIDs={[]}\n stateName=\"item-search-global\"\n //onOpenItem={onChooseItem ? handleOpenItem : undefined}\n />\n </Card>\n </TabContentsWithHeader>\n );\n};\n\nexport default RegisterHome2;\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
/** @jsxFrag React.Fragment */
|
|
3
3
|
import React from 'react';
|
|
4
|
-
import { type
|
|
4
|
+
import { type InternalItemReference, type ItemClassConfiguration, type RegisterItem } from '../../../types';
|
|
5
5
|
export declare const ItemDetail: React.VoidFunctionComponent<{
|
|
6
6
|
item: RegisterItem;
|
|
7
|
+
itemBefore?: RegisterItem;
|
|
7
8
|
itemRef: InternalItemReference;
|
|
8
9
|
itemClass: ItemClassConfiguration<any>;
|
|
9
10
|
className?: string;
|
|
@@ -23,19 +23,21 @@ var _protocolRegistry = require("../../protocolRegistry");
|
|
|
23
23
|
|
|
24
24
|
var _types = require("../../../types");
|
|
25
25
|
|
|
26
|
+
var _InlineDiff = require("../../diffing/InlineDiff");
|
|
27
|
+
|
|
26
28
|
var _BrowserCtx = require("../../BrowserCtx");
|
|
27
29
|
|
|
28
30
|
var _util2 = require("../../util");
|
|
29
31
|
|
|
30
|
-
var
|
|
32
|
+
var _ProposalType = require("../../../proposals/ProposalType");
|
|
31
33
|
|
|
32
|
-
var
|
|
34
|
+
var _HistoryDrawer = _interopRequireDefault(require("../../../proposals/HistoryDrawer"));
|
|
33
35
|
|
|
34
|
-
var
|
|
36
|
+
var _itemPathUtils = require("../../itemPathUtils");
|
|
35
37
|
|
|
36
|
-
var
|
|
38
|
+
var _objectChangeset = require("../../../proposals/objectChangeset");
|
|
37
39
|
|
|
38
|
-
var
|
|
40
|
+
var _ChangeRequestContext = require("../../../proposals/ChangeRequestContext");
|
|
39
41
|
|
|
40
42
|
var _RelatedItems = require("./RelatedItems");
|
|
41
43
|
|
|
@@ -58,7 +60,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
58
60
|
const MaybeItemDetail = (0, _react.memo)(function ({
|
|
59
61
|
uri
|
|
60
62
|
}) {
|
|
61
|
-
var _a, _b, _c; //const { value: itemData } = useSingleRegisterItemData(ref);
|
|
63
|
+
var _a, _b, _c, _d; //const { value: itemData } = useSingleRegisterItemData(ref);
|
|
62
64
|
|
|
63
65
|
|
|
64
66
|
const {
|
|
@@ -84,16 +86,22 @@ const MaybeItemDetail = (0, _react.memo)(function ({
|
|
|
84
86
|
}), [itemPath]);
|
|
85
87
|
const itemResponse = useRegisterItemData(itemRequest);
|
|
86
88
|
const itemData = itemResponse.value[itemPath];
|
|
89
|
+
const previousItemResponse = useRegisterItemData({
|
|
90
|
+
itemPaths: [itemPath],
|
|
91
|
+
ignoreActiveCR: true
|
|
92
|
+
});
|
|
93
|
+
const itemDataBefore = (_c = previousItemResponse.value[itemPath]) !== null && _c !== void 0 ? _c : undefined;
|
|
87
94
|
|
|
88
95
|
if (!itemClass) {
|
|
89
96
|
return (0, _react2.jsx)(_core.NonIdealState, {
|
|
90
97
|
icon: "heart-broken",
|
|
91
98
|
title: "Unable to show item",
|
|
92
|
-
description: `View for ${(
|
|
99
|
+
description: `View for ${(_d = ref === null || ref === void 0 ? void 0 : ref.itemID) !== null && _d !== void 0 ? _d : uri} cannot be retrieved from item class configuration`
|
|
93
100
|
});
|
|
94
101
|
} else if ((0, _types.isRegisterItem)(itemData)) {
|
|
95
102
|
return (0, _react2.jsx)(ItemDetail, {
|
|
96
103
|
item: itemData,
|
|
104
|
+
itemBefore: itemDataBefore,
|
|
97
105
|
itemRef: itemRef,
|
|
98
106
|
itemClass: itemClass
|
|
99
107
|
});
|
|
@@ -126,8 +134,10 @@ const MaybeItemDetail = (0, _react.memo)(function ({
|
|
|
126
134
|
}
|
|
127
135
|
}
|
|
128
136
|
});
|
|
137
|
+
const EMPTY_OBJECT = {};
|
|
129
138
|
const ItemDetail = (0, _react.memo)(function ({
|
|
130
139
|
item,
|
|
140
|
+
itemBefore,
|
|
131
141
|
itemRef,
|
|
132
142
|
itemClass,
|
|
133
143
|
className,
|
|
@@ -151,7 +161,19 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
151
161
|
isBusy
|
|
152
162
|
} = (0, _react.useContext)(_context.DatasetContext);
|
|
153
163
|
const [editedItemData, setEditedItemData] = (0, _react.useState)(null);
|
|
154
|
-
const itemDataHasChanges = JSON.stringify(editedItemData) !== JSON.stringify(item.data);
|
|
164
|
+
const itemDataHasChanges = JSON.stringify(editedItemData) !== JSON.stringify(item.data);
|
|
165
|
+
const [isEditingProposal, setIsEditingProposal] = (0, _react.useState)(false); //const [ diffMode, setDiffMode ] = useState<boolean>(false);
|
|
166
|
+
// TODO: Implement diff mode
|
|
167
|
+
|
|
168
|
+
const diffMode = false;
|
|
169
|
+
const itemPath = (0, _itemPathUtils.itemRefToItemPath)(itemRef);
|
|
170
|
+
/** Proposal for the current item. */
|
|
171
|
+
|
|
172
|
+
const proposal = (_a = activeCR && activeCR.items[itemPath] ? activeCR.items[itemPath] : null) !== null && _a !== void 0 ? _a : null;
|
|
173
|
+
const [preferredComparison, setPreferredComparison] = (0, _react.useState)(null);
|
|
174
|
+
const canCompare = (proposal === null || proposal === void 0 ? void 0 : proposal.type) === 'clarification' && itemBefore;
|
|
175
|
+
const showDiff = preferredComparison === 'diff' && canCompare;
|
|
176
|
+
const showBefore = preferredComparison === 'prior' && canCompare; // Gather views
|
|
155
177
|
|
|
156
178
|
const ListItemView = itemClass.views.listItemView;
|
|
157
179
|
let details;
|
|
@@ -165,24 +187,29 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
165
187
|
// TODO: make importing context from registry-kit work in new-style extension
|
|
166
188
|
useRegisterItemData: useRegisterItemData
|
|
167
189
|
});
|
|
190
|
+
} else if (showDiff) {
|
|
191
|
+
details = (0, _react2.jsx)(_InlineDiff.InlineDiffGeneric, {
|
|
192
|
+
item1: itemBefore !== null && itemBefore !== void 0 ? itemBefore : EMPTY_OBJECT,
|
|
193
|
+
item2: item,
|
|
194
|
+
css: (0, _react2.css)`
|
|
195
|
+
position: absolute; inset: 0; padding: 10px; overflow: auto;
|
|
196
|
+
background-color: white;
|
|
197
|
+
.bp4-dark & {
|
|
198
|
+
background-color: ${_core.Colors.DARK_GRAY2};
|
|
199
|
+
}
|
|
200
|
+
`,
|
|
201
|
+
className: `${_core.Classes.ELEVATION_2} ${_core.Classes.RUNNING_TEXT}`
|
|
202
|
+
});
|
|
168
203
|
} else {
|
|
169
|
-
const DetailView = (
|
|
204
|
+
const DetailView = (_b = itemClass.views.detailView) !== null && _b !== void 0 ? _b : itemClass.views.editView;
|
|
170
205
|
details = (0, _react2.jsx)(DetailView, {
|
|
171
206
|
itemRef: itemRef,
|
|
172
|
-
itemData: item.data,
|
|
207
|
+
itemData: showBefore ? itemBefore.data : item.data,
|
|
173
208
|
// TODO: make importing context from registry-kit work in new-style extension
|
|
174
209
|
useRegisterItemData: useRegisterItemData
|
|
175
210
|
});
|
|
176
211
|
}
|
|
177
212
|
|
|
178
|
-
const [isEditingProposal, setIsEditingProposal] = (0, _react.useState)(false); //const [ diffMode, setDiffMode ] = useState<boolean>(false);
|
|
179
|
-
// TODO: Implement diff mode
|
|
180
|
-
|
|
181
|
-
const diffMode = false;
|
|
182
|
-
const itemPath = (0, _itemPathUtils.itemRefToItemPath)(itemRef);
|
|
183
|
-
/** Proposal for the current item. */
|
|
184
|
-
|
|
185
|
-
const proposal = (_b = activeCR && activeCR.items[itemPath] ? activeCR.items[itemPath] : null) !== null && _b !== void 0 ? _b : null;
|
|
186
213
|
const proposedSupersedingItemRefs = (proposal === null || proposal === void 0 ? void 0 : proposal.type) === 'amendment' && proposal.amendmentType === 'supersession' ? proposal.supersedingItemIDs.map(id => ({
|
|
187
214
|
itemID: id,
|
|
188
215
|
// Superseding items are always of the same class
|
|
@@ -343,7 +370,7 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
343
370
|
});
|
|
344
371
|
|
|
345
372
|
if (proposal) {
|
|
346
|
-
const tagProps = (0,
|
|
373
|
+
const tagProps = (0, _ProposalType.proposalToTagProps)(proposal);
|
|
347
374
|
classification.push({ ...tagProps,
|
|
348
375
|
children: (0, _react2.jsx)(_react.default.Fragment, null, tagProps.children, " proposed"),
|
|
349
376
|
icon: 'lightbulb',
|
|
@@ -443,6 +470,20 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
443
470
|
actions.push([proposeBtn, ...editActions]);
|
|
444
471
|
} else {
|
|
445
472
|
actions.push(proposeBtn);
|
|
473
|
+
|
|
474
|
+
if (canCompare) {
|
|
475
|
+
actions.push([{
|
|
476
|
+
disabled: isBusy,
|
|
477
|
+
children: "Prior version",
|
|
478
|
+
active: preferredComparison === 'prior',
|
|
479
|
+
onClick: preferredComparison === 'prior' ? () => setPreferredComparison(null) : () => setPreferredComparison('prior')
|
|
480
|
+
}, {
|
|
481
|
+
disabled: isBusy,
|
|
482
|
+
children: "Diff",
|
|
483
|
+
active: preferredComparison === 'diff',
|
|
484
|
+
onClick: preferredComparison === 'diff' ? () => setPreferredComparison(null) : () => setPreferredComparison('diff')
|
|
485
|
+
}]);
|
|
486
|
+
}
|
|
446
487
|
}
|
|
447
488
|
} else {
|
|
448
489
|
const proposeBtn = {
|
|
@@ -487,7 +528,7 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
487
528
|
|
|
488
529
|
|
|
489
530
|
return actions;
|
|
490
|
-
}, [isBusy, itemClass.meta.id, proposal === null, proposal === null || proposal === void 0 ? void 0 : proposal.type, (_e = proposal === null || proposal === void 0 ? void 0 : proposal.supersedingItemIDs) === null || _e === void 0 ? void 0 : _e.toString(), activeCRIsEditable, editedItemData === null, itemDataHasChanges, isEditingProposal, performOperation, handleSetProposal, historyDrawerOpenState]); // If there’s a CR context without active CR,
|
|
531
|
+
}, [isBusy, itemClass.meta.id, proposal === null, proposal === null || proposal === void 0 ? void 0 : proposal.type, (_e = proposal === null || proposal === void 0 ? void 0 : proposal.supersedingItemIDs) === null || _e === void 0 ? void 0 : _e.toString(), activeCRIsEditable, editedItemData === null, itemDataHasChanges, isEditingProposal, performOperation, handleSetProposal, historyDrawerOpenState, canCompare, preferredComparison, setPreferredComparison]); // If there’s a CR context without active CR,
|
|
491
532
|
// or active CR isn’t the same as the one in CR context,
|
|
492
533
|
// then we can assume that the item is shown in proposal window
|
|
493
534
|
// and we’d set window title to proposal’s title rather than item’s.
|
|
@@ -507,7 +548,7 @@ const ItemDetail = (0, _react.memo)(function ({
|
|
|
507
548
|
actions: actions
|
|
508
549
|
}, (0, _react2.jsx)(_core.Card, {
|
|
509
550
|
css: (0, _react2.css)`position: absolute; border-radius: 0; inset: ${compactHeader ? '0' : '10px'}; overflow-y: auto;`
|
|
510
|
-
}, (0, _react2.jsx)(_util2.RegisterHelmet, null, (0, _react2.jsx)("title", null, windowTitle)), (0, _react2.jsx)(
|
|
551
|
+
}, (0, _react2.jsx)(_util2.RegisterHelmet, null, (0, _react2.jsx)("title", null, windowTitle)), (0, _react2.jsx)(_HistoryDrawer.default, {
|
|
511
552
|
isOpen: historyDrawerOpenState,
|
|
512
553
|
onClose: () => setHistoryDrawerOpenState(false),
|
|
513
554
|
itemPath: itemPath
|