@riboseinc/paneron-registry-kit 2.0.6 → 2.0.8
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 -4
- package/site-builder/index.d.ts +6 -0
- package/site-builder/index.js +27 -0
- package/site-builder/index.js.map +1 -0
- package/site-builder/jsx-runtime.d.ts +18 -0
- package/site-builder/jsx-runtime.js +105 -0
- package/site-builder/jsx-runtime.js.map +1 -0
- package/site-builder/page.d.ts +6 -0
- package/site-builder/page.js +22 -0
- package/site-builder/page.js.map +1 -0
- package/views/GenericRelatedItemView.js +1 -1
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/detail/RegisterItem/index.js +2 -1
- package/views/detail/RegisterItem/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.0.
|
|
3
|
+
"version": "2.0.8",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "Ribose Inc. <open.source@ribose.com>",
|
|
6
6
|
"scripts": {
|
|
@@ -29,8 +29,7 @@
|
|
|
29
29
|
"@emotion/react": "^11.10.6",
|
|
30
30
|
"@emotion/styled": "^11.10.6",
|
|
31
31
|
"@riboseinc/isogit-lfs": "0.1.6",
|
|
32
|
-
"@riboseinc/paneron-extension-kit": "2.0.
|
|
33
|
-
"@types/js-yaml": "^3.12.5",
|
|
32
|
+
"@riboseinc/paneron-extension-kit": "2.0.5",
|
|
34
33
|
"@types/node": "^16.11.7",
|
|
35
34
|
"@types/object-hash": "~3.0.2",
|
|
36
35
|
"@types/ramda": "^0.27.35",
|
|
@@ -41,7 +40,6 @@
|
|
|
41
40
|
"@types/throttle-debounce": "^2.1.0",
|
|
42
41
|
"date-fns": "^2.22.1",
|
|
43
42
|
"immutability-helper": "^3.1.1",
|
|
44
|
-
"js-yaml": "^3.14.0",
|
|
45
43
|
"jsondiffpatch": "^0.4.1",
|
|
46
44
|
"react": "^17.0.2",
|
|
47
45
|
"react-dom": "^17.0.2",
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BufferDataset } from '@riboseinc/paneron-extension-kit/types/buffers';
|
|
2
|
+
import type { DatasetContext } from '@riboseinc/paneron-extension-kit/types/renderer';
|
|
3
|
+
export default function exportPublicSite({ getObjectData }: {
|
|
4
|
+
getObjectData: DatasetContext["getObjectData"];
|
|
5
|
+
onProgress?: (message: string) => void;
|
|
6
|
+
}): AsyncGenerator<BufferDataset, void, void>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exportPublicSite;
|
|
7
|
+
|
|
8
|
+
var _common = require("../common");
|
|
9
|
+
|
|
10
|
+
var _page = _interopRequireDefault(require("./page"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
async function* exportPublicSite({
|
|
15
|
+
getObjectData
|
|
16
|
+
}) {
|
|
17
|
+
const registerMeta = (await getObjectData({
|
|
18
|
+
objectPaths: [`/${_common.REGISTER_METADATA_FILENAME}`]
|
|
19
|
+
})).data[`/${_common.REGISTER_METADATA_FILENAME}`];
|
|
20
|
+
yield {
|
|
21
|
+
'/hello.txt': Buffer.from('hello'),
|
|
22
|
+
'/index.html': Buffer.from((0, _page.default)({
|
|
23
|
+
title: "Register"
|
|
24
|
+
})),
|
|
25
|
+
'/register-meta.json': Buffer.from(JSON.stringify(registerMeta))
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/site-builder/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,OAAO,MAAM,QAAQ,CAAC;AAG7B,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,gBAAgB,CAAC,EAAE,aAAa,EAG9D;IACC,MAAM,YAAY,GAAG,CAAC,MAAM,aAAa,CAAC;QACxC,WAAW,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC;KAChD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAE3C,MAAM;QACJ,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC","sourcesContent":["import type { BufferDataset } from '@riboseinc/paneron-extension-kit/types/buffers';\nimport type { DatasetContext } from '@riboseinc/paneron-extension-kit/types/renderer';\nimport { REGISTER_METADATA_FILENAME } from '../common'; \nimport getHTML from './page';\n\n\nexport default async function* exportPublicSite({ getObjectData }: {\n getObjectData: DatasetContext[\"getObjectData\"],\n onProgress?: (message: string) => void,\n}): AsyncGenerator<BufferDataset, void, void> {\n const registerMeta = (await getObjectData({\n objectPaths: [`/${REGISTER_METADATA_FILENAME}`],\n })).data[`/${REGISTER_METADATA_FILENAME}`];\n\n yield {\n '/hello.txt': Buffer.from('hello'),\n '/index.html': Buffer.from(getHTML({ title: \"Register\" })),\n '/register-meta.json': Buffer.from(JSON.stringify(registerMeta)),\n };\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare namespace JSX {
|
|
2
|
+
type Element = string;
|
|
3
|
+
interface IntrinsicElements {
|
|
4
|
+
[el: string]: any;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
declare type AttributeValue = number | string | Date | boolean;
|
|
8
|
+
export interface Children {
|
|
9
|
+
children?: string | string[];
|
|
10
|
+
}
|
|
11
|
+
export interface CustomElementHandler {
|
|
12
|
+
(attributes: Attributes & Children, contents: string[]): string;
|
|
13
|
+
}
|
|
14
|
+
export interface Attributes {
|
|
15
|
+
[key: string]: AttributeValue;
|
|
16
|
+
}
|
|
17
|
+
declare function createElement(name: string | CustomElementHandler, attributes: Attributes & Children | undefined, ...contents: string[]): string;
|
|
18
|
+
export { createElement as jsxs, createElement as jsx };
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.jsx = exports.jsxs = createElement;
|
|
7
|
+
const capitalACharCode = 'A'.charCodeAt(0);
|
|
8
|
+
const capitalZCharCode = 'Z'.charCodeAt(0);
|
|
9
|
+
|
|
10
|
+
function isUpper(input, index) {
|
|
11
|
+
const charCode = input.charCodeAt(index);
|
|
12
|
+
return capitalACharCode <= charCode && capitalZCharCode >= charCode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
;
|
|
16
|
+
|
|
17
|
+
function toKebabCase(camelCased) {
|
|
18
|
+
let kebabCased = '';
|
|
19
|
+
|
|
20
|
+
for (let i = 0; i < camelCased.length; i++) {
|
|
21
|
+
const prevUpperCased = i > 0 ? isUpper(camelCased, i - 1) : true;
|
|
22
|
+
const currentUpperCased = isUpper(camelCased, i);
|
|
23
|
+
const nextUpperCased = i < camelCased.length - 1 ? isUpper(camelCased, i + 1) : true;
|
|
24
|
+
|
|
25
|
+
if (!prevUpperCased && currentUpperCased || currentUpperCased && !nextUpperCased) {
|
|
26
|
+
kebabCased += '-';
|
|
27
|
+
kebabCased += camelCased[i].toLowerCase();
|
|
28
|
+
} else {
|
|
29
|
+
kebabCased += camelCased[i];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return kebabCased;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
;
|
|
37
|
+
|
|
38
|
+
function escapeAttrNodeValue(value) {
|
|
39
|
+
return value.replace(/(&)|(")|(\u00A0)/g, (_, amp, quote) => {
|
|
40
|
+
if (amp) {
|
|
41
|
+
return '&';
|
|
42
|
+
} else if (quote) {
|
|
43
|
+
return '"';
|
|
44
|
+
} else {
|
|
45
|
+
return ' ';
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
;
|
|
51
|
+
|
|
52
|
+
function getAttributeStringifier(attributes) {
|
|
53
|
+
return function attributeToString(name) {
|
|
54
|
+
const value = attributes[name];
|
|
55
|
+
const formattedName = toKebabCase(name);
|
|
56
|
+
|
|
57
|
+
const makeAttribute = value => `${formattedName}="${value}"`;
|
|
58
|
+
|
|
59
|
+
if (value instanceof Date) {
|
|
60
|
+
return makeAttribute(value.toISOString());
|
|
61
|
+
} else switch (typeof value) {
|
|
62
|
+
case 'boolean':
|
|
63
|
+
if (value) {
|
|
64
|
+
return formattedName;
|
|
65
|
+
} else {
|
|
66
|
+
return '';
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
default:
|
|
70
|
+
return makeAttribute(escapeAttrNodeValue(value.toString()));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
;
|
|
76
|
+
|
|
77
|
+
function attributesToString(attributes) {
|
|
78
|
+
const spaceSeparated = Object.keys(attributes).filter(attribute => attribute !== 'children').map(getAttributeStringifier(attributes)).filter(attribute => attribute.length).join(' ');
|
|
79
|
+
|
|
80
|
+
if (spaceSeparated.trim()) {
|
|
81
|
+
return ` ${spaceSeparated}`;
|
|
82
|
+
} else {
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
;
|
|
88
|
+
|
|
89
|
+
function contentsToString(contents) {
|
|
90
|
+
return contents.map(elements => Array.isArray(elements) ? elements.join('\n') : elements).join('\n') ?? '';
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
;
|
|
94
|
+
|
|
95
|
+
function createElement(name, attributes, ...contents) {
|
|
96
|
+
if (typeof name === 'function') {
|
|
97
|
+
return name(attributes ?? {}, contents);
|
|
98
|
+
} else {
|
|
99
|
+
const tagName = toKebabCase(name);
|
|
100
|
+
const inner1 = contentsToString(contents);
|
|
101
|
+
const inner2 = attributes !== null && attributes !== void 0 && attributes.children ? contentsToString(Array.isArray(attributes.children) ? attributes.children : [attributes.children]) : '';
|
|
102
|
+
const inner = inner1 && inner2 ? `${inner1}\n${inner2}` : inner1 || inner2;
|
|
103
|
+
return `<${tagName}${attributes ? attributesToString(attributes) : ''}>${inner}</${tagName}>`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../../src/site-builder/jsx-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["export namespace JSX {\n export type Element = string;\n export interface IntrinsicElements {\n [el: string]: any\n }\n}\n\ntype AttributeValue = number | string | Date | boolean;\n\nexport interface Children {\n children?: string | string[];\n}\n\nexport interface CustomElementHandler {\n (attributes: Attributes & Children, contents: string[]): string;\n}\n\nexport interface Attributes {\n [key: string]: AttributeValue;\n}\n\nconst capitalACharCode = 'A'.charCodeAt(0);\nconst capitalZCharCode = 'Z'.charCodeAt(0);\n\nfunction isUpper(input: string, index: number) {\n const charCode = input.charCodeAt(index);\n return capitalACharCode <= charCode && capitalZCharCode >= charCode;\n};\n\nfunction toKebabCase(camelCased: string) {\n let kebabCased = '';\n for (let i = 0; i < camelCased.length; i++) {\n const prevUpperCased = i > 0 ? isUpper(camelCased, i - 1) : true;\n const currentUpperCased = isUpper(camelCased, i);\n const nextUpperCased = i < camelCased.length - 1 ? isUpper(camelCased, i + 1) : true;\n if (!prevUpperCased && currentUpperCased || currentUpperCased && !nextUpperCased) {\n kebabCased += '-';\n kebabCased += camelCased[i].toLowerCase();\n } else {\n kebabCased += camelCased[i];\n }\n }\n return kebabCased;\n};\n\nfunction escapeAttrNodeValue(value: string) {\n return (\n value.replace(/(&)|(\")|(\\u00A0)/g, (_, amp, quote) => {\n if (amp) { return '&'; }\n else if (quote) { return '"'; }\n else { return ' '; }\n })\n );\n};\n\nfunction getAttributeStringifier(attributes: Attributes) {\n return function attributeToString(name: string): string {\n const value = attributes[name];\n const formattedName = toKebabCase(name);\n const makeAttribute = (value: string) => `${formattedName}=\"${value}\"`;\n\n if (value instanceof Date) {\n return makeAttribute(value.toISOString());\n } else switch (typeof value) {\n case 'boolean':\n if (value) {\n return formattedName;\n } else {\n return '';\n }\n default:\n return makeAttribute(escapeAttrNodeValue(value.toString()));\n }\n }\n};\n\nfunction attributesToString(attributes: Attributes) {\n const spaceSeparated = Object.keys(attributes).\n filter(attribute => attribute !== 'children').\n map(getAttributeStringifier(attributes)).\n filter(attribute => attribute.length).\n join(' ');\n if (spaceSeparated.trim()) {\n return ` ${spaceSeparated}`;\n } else {\n return '';\n }\n};\n\nfunction contentsToString(contents: string[]) {\n return contents.\n map(elements => Array.isArray(elements) ? elements.join('\\n') : elements).\n join('\\n') ?? ''\n};\n\nfunction createElement(\n name: string | CustomElementHandler,\n attributes: Attributes & Children | undefined,\n ...contents: string[]\n): string {\n if (typeof name === 'function') {\n return name(attributes ?? {}, contents);\n } else {\n const tagName = toKebabCase(name);\n const inner1 = contentsToString(contents);\n const inner2 = attributes?.children\n ? contentsToString(\n Array.isArray(attributes.children)\n ? attributes.children\n : [attributes.children]\n )\n : '';\n const inner = inner1 && inner2\n ? `${inner1}\\n${inner2}`\n : inner1 || inner2;\n return `<${tagName}${attributes ? attributesToString(attributes) : ''}>${inner}</${tagName}>`;\n }\n}\n\nexport { createElement as jsxs, createElement as jsx }\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = getHTML;
|
|
7
|
+
|
|
8
|
+
var _jsxRuntime = require("./jsx-runtime");
|
|
9
|
+
|
|
10
|
+
function getHTML(meta) {
|
|
11
|
+
return (0, _jsxRuntime.jsxs)("html", {
|
|
12
|
+
children: [(0, _jsxRuntime.jsx)("head", {
|
|
13
|
+
children: (0, _jsxRuntime.jsx)("title", {
|
|
14
|
+
children: meta.title
|
|
15
|
+
})
|
|
16
|
+
}), (0, _jsxRuntime.jsx)("body", {
|
|
17
|
+
children: (0, _jsxRuntime.jsx)("div", {
|
|
18
|
+
children: "test"
|
|
19
|
+
})
|
|
20
|
+
})]
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/site-builder/page.tsx"],"names":[],"mappings":";AAOA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,IAAc;IAC5C,OAAO,2BACL,yBACE,0BAAQ,IAAI,CAAC,KAAK,GAAS,GACtB,EACP,yBACE,iCAAe,GACV,IACF,CAAC;AACV,CAAC","sourcesContent":["/** @jsxImportSource . */\n\n\ninterface PageMeta {\n title: string\n}\n\nexport default function getHTML(meta: PageMeta): string {\n return <html>\n <head>\n <title>{meta.title}</title>\n </head>\n <body>\n <div>test</div>\n </body>\n </html>;\n}\n"]}
|
|
@@ -114,7 +114,7 @@ const GenericRelatedItemView = function ({
|
|
|
114
114
|
/*classIDs.length >= 1 && */
|
|
115
115
|
onChange && !itemResult.isUpdating;
|
|
116
116
|
const canClear = onClear && itemID !== '' && !itemResult.isUpdating;
|
|
117
|
-
const canJump = item !== null && classConfigured && !itemResult.isUpdating && (onJump || jumpTo);
|
|
117
|
+
const canJump = (item !== null || itemIsMissing) && classConfigured && !itemResult.isUpdating && (onJump || jumpTo);
|
|
118
118
|
let itemView;
|
|
119
119
|
let itemButtons = [];
|
|
120
120
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericRelatedItemView.js","sourceRoot":"","sources":["../../src/views/GenericRelatedItemView.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx, css } from '@emotion/react';\nimport React, { useContext, useState } from 'react';\nimport { Button, ButtonGroup, ButtonProps, Dialog } from '@blueprintjs/core';\nimport {\n type GenericRelatedItemViewProps,\n type InternalItemReference,\n type RelatedItemClassConfiguration,\n isRegisterItem,\n} from '../types';\nimport { BrowserCtx } from './BrowserCtx';\nimport { ChangeRequestContext } from './change-request/ChangeRequestContext';\nimport { isDrafted } from '../types/cr';\nimport Search from './sidebar/Search';\nimport { itemPathToItemRef } from './itemPathUtils';\nimport type { Criterion, CriteriaGroup } from './FilterCriteria/models';\nimport { Protocols } from './protocolRegistry';\n\n\nexport const GenericRelatedItemView: React.FC<GenericRelatedItemViewProps> = function ({\n itemRef, className,\n onCreateNew, onClear, onChange,\n availableClassIDs,\n onJump,\n // availableSubregisterIDs,\n // itemSorter,\n}) {\n const {\n useRegisterItemData,\n getRelatedItemClassConfiguration,\n jumpTo,\n } = useContext(BrowserCtx);\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { classID, itemID, subregisterID } = itemRef ?? {\n classID: '',\n itemID: '',\n subregisterID: '',\n };\n\n const itemPathWithClass = `${classID}/${itemID}.yaml`;\n // If curretn register has subregisters, specify subregister-relative path\n const itemPathWithSubregister = subregisterID\n ? `subregisters/${subregisterID}/${itemPathWithClass}`\n : `${itemPathWithClass}`;\n // If a change request is active\n // and this item is among clarifications or additions\n // then use item path relative to the change request\n const affectedByActiveCR = (\n activeChangeRequest &&\n isDrafted(activeChangeRequest) &&\n activeChangeRequest.items[itemPathWithSubregister]\n );\n const itemPath = affectedByActiveCR\n ? `/proposals/${activeChangeRequest.id}/items/${itemPathWithSubregister}`\n : `/${itemPathWithSubregister}`;\n\n const [selectDialogState, setSelectDialogState] = useState(false);\n\n //log.debug(\"Rendering generic related item view\", itemRef);\n //const { jumpToItem } = useContext(BrowserCtx);\n\n const itemResult = useRegisterItemData({ itemPaths: [itemPath] });\n const item = (itemResult.value?.[itemPath] || null);\n\n let classConfigured: boolean;\n let cfg: RelatedItemClassConfiguration;\n try {\n cfg = getRelatedItemClassConfiguration(classID);\n classConfigured = true;\n } catch (e) {\n cfg = {\n title: classID,\n itemView: () => <span>{itemID}</span>\n };\n classConfigured = false;\n }\n\n const Item = cfg.itemView;\n\n async function handleCreateNew() {\n if (!onCreateNew) { return; }\n const itemRef = await onCreateNew();\n console.debug(\"Created new\", itemRef);\n }\n\n const classIDs = availableClassIDs ?? ((itemRef?.classID ?? '') !== '' ? [itemRef!.classID] : []);\n\n function jump() {\n //jumpToItem?.(classID, itemID, subregisterID);\n onJump\n ? onJump()\n : jumpTo?.(`${Protocols.ITEM_DETAILS}:/${itemPathWithSubregister}`);\n }\n\n const hasItem = item !== null && classConfigured && isRegisterItem(item);\n const itemIsMissing = itemID !== '' && (item === null && !itemResult.isUpdating);\n const canAutoCreateRelatedItem = itemID === '' && onCreateNew && !itemResult.isUpdating;\n const canChangeRelatedItem = /*classIDs.length >= 1 && */onChange && !itemResult.isUpdating;\n const canClear = onClear && itemID !== '' && !itemResult.isUpdating;\n const canJump = item !== null && classConfigured && !itemResult.isUpdating && (onJump || jumpTo);\n\n let itemView: JSX.Element | null;\n let itemButtons: ButtonProps[] = [];\n\n if (hasItem) {\n itemView = <Item\n itemRef={{ classID, itemID, subregisterID }}\n itemData={item.data}\n />;\n } else {\n if (canAutoCreateRelatedItem) {\n itemButtons.push({\n onClick: handleCreateNew,\n icon: 'add',\n text: 'Auto create',\n intent: 'primary',\n });\n }\n if (itemIsMissing) {\n itemView = <span>Item not found: {itemID ?? 'N/A'}</span>;\n } else {\n itemView = <span>Item not specified</span>;\n }\n }\n\n const willShowItemView = hasItem || itemIsMissing || !onChange;\n\n if (canChangeRelatedItem) {\n itemButtons.push({\n onClick: () => setSelectDialogState(true),\n icon: 'edit',\n text: willShowItemView ? undefined : 'Specify',\n intent: 'primary',\n /*disabled: classIDs.length < 1,*/\n });\n }\n\n if (canClear) {\n itemButtons.push({ onClick: onClear, icon: 'cross', intent: 'danger' });\n }\n\n //log.debug(\"Rendering generic related item view: got item\", item);\n return (\n <ButtonGroup\n fill\n className={className}\n css={css`.bp4-button-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }`}>\n {classID\n ? <Button\n alignText=\"left\"\n css={css`width: 180px;`}\n title={`Item class: ${cfg.title ?? \"N/A\"}`}\n outlined disabled>\n {cfg.title ?? \"Class N/A\"}\n </Button>\n : null}\n {willShowItemView\n ? <Button\n alignText=\"left\"\n fill={hasItem} outlined\n disabled={!canJump}\n onClick={jump}\n loading={itemResult.isUpdating}\n title={hasItem\n ? `${cfg.title} (click to jump to item)`\n : undefined}>\n {itemView}\n </Button>\n : null}\n\n {itemButtons.map((props, idx) =>\n <Button key={idx} outlined {...props} />\n )}\n\n {onChange\n ? <RelatedItemSelectionDialog\n isOpen={selectDialogState}\n onClose={() => setSelectDialogState(false)}\n onChange={onChange}\n availableClassIDs={classIDs}\n />\n : null}\n </ButtonGroup>\n );\n};\n\n\nconst RelatedItemSelectionDialog: React.FC<{\n isOpen: boolean\n onClose: () => void\n onChange: (itemRef: InternalItemReference) => void\n availableClassIDs: string[]\n}> = function ({\n isOpen, onClose, onChange,\n availableClassIDs,\n}) {\n const { subregisters } = useContext(BrowserCtx);\n\n const classCriteria: Criterion[] = availableClassIDs.map(clsID => ({\n key: 'item-class',\n query: `objPath.indexOf(\\\"/${clsID}/\\\") >= 0`,\n }));\n\n const implicitCriteria: CriteriaGroup | undefined = classCriteria.length > 0\n ? {\n require: 'any',\n criteria: classCriteria,\n }\n : undefined;\n\n return (\n <Dialog\n isOpen={isOpen}\n onClose={onClose}\n enforceFocus={false}\n style={{ padding: '0', width: 'unset' }}>\n <Search\n style={{ height: '90vh', width: '90vw' }}\n availableClassIDs={availableClassIDs}\n implicitCriteria={implicitCriteria}\n stateName=\"superseding-item-selector-search\"\n onOpenItem={(itemPath) => {\n onChange(itemPathToItemRef(subregisters !== undefined, itemPath));\n onClose();\n }}\n />\n </Dialog>\n );\n}\n\n\nexport default GenericRelatedItemView;\n"]}
|
|
1
|
+
{"version":3,"file":"GenericRelatedItemView.js","sourceRoot":"","sources":["../../src/views/GenericRelatedItemView.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx, css } from '@emotion/react';\nimport React, { useContext, useState } from 'react';\nimport { Button, ButtonGroup, ButtonProps, Dialog } from '@blueprintjs/core';\nimport {\n type GenericRelatedItemViewProps,\n type InternalItemReference,\n type RelatedItemClassConfiguration,\n isRegisterItem,\n} from '../types';\nimport { BrowserCtx } from './BrowserCtx';\nimport { ChangeRequestContext } from './change-request/ChangeRequestContext';\nimport { isDrafted } from '../types/cr';\nimport Search from './sidebar/Search';\nimport { itemPathToItemRef } from './itemPathUtils';\nimport type { Criterion, CriteriaGroup } from './FilterCriteria/models';\nimport { Protocols } from './protocolRegistry';\n\n\nexport const GenericRelatedItemView: React.FC<GenericRelatedItemViewProps> = function ({\n itemRef, className,\n onCreateNew, onClear, onChange,\n availableClassIDs,\n onJump,\n // availableSubregisterIDs,\n // itemSorter,\n}) {\n const {\n useRegisterItemData,\n getRelatedItemClassConfiguration,\n jumpTo,\n } = useContext(BrowserCtx);\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { classID, itemID, subregisterID } = itemRef ?? {\n classID: '',\n itemID: '',\n subregisterID: '',\n };\n\n const itemPathWithClass = `${classID}/${itemID}.yaml`;\n // If curretn register has subregisters, specify subregister-relative path\n const itemPathWithSubregister = subregisterID\n ? `subregisters/${subregisterID}/${itemPathWithClass}`\n : `${itemPathWithClass}`;\n // If a change request is active\n // and this item is among clarifications or additions\n // then use item path relative to the change request\n const affectedByActiveCR = (\n activeChangeRequest &&\n isDrafted(activeChangeRequest) &&\n activeChangeRequest.items[itemPathWithSubregister]\n );\n const itemPath = affectedByActiveCR\n ? `/proposals/${activeChangeRequest.id}/items/${itemPathWithSubregister}`\n : `/${itemPathWithSubregister}`;\n\n const [selectDialogState, setSelectDialogState] = useState(false);\n\n //log.debug(\"Rendering generic related item view\", itemRef);\n //const { jumpToItem } = useContext(BrowserCtx);\n\n const itemResult = useRegisterItemData({ itemPaths: [itemPath] });\n const item = (itemResult.value?.[itemPath] || null);\n\n let classConfigured: boolean;\n let cfg: RelatedItemClassConfiguration;\n try {\n cfg = getRelatedItemClassConfiguration(classID);\n classConfigured = true;\n } catch (e) {\n cfg = {\n title: classID,\n itemView: () => <span>{itemID}</span>\n };\n classConfigured = false;\n }\n\n const Item = cfg.itemView;\n\n async function handleCreateNew() {\n if (!onCreateNew) { return; }\n const itemRef = await onCreateNew();\n console.debug(\"Created new\", itemRef);\n }\n\n const classIDs = availableClassIDs ?? ((itemRef?.classID ?? '') !== '' ? [itemRef!.classID] : []);\n\n function jump() {\n //jumpToItem?.(classID, itemID, subregisterID);\n onJump\n ? onJump()\n : jumpTo?.(`${Protocols.ITEM_DETAILS}:/${itemPathWithSubregister}`);\n }\n\n const hasItem = item !== null && classConfigured && isRegisterItem(item);\n const itemIsMissing = itemID !== '' && (item === null && !itemResult.isUpdating);\n const canAutoCreateRelatedItem = itemID === '' && onCreateNew && !itemResult.isUpdating;\n const canChangeRelatedItem = /*classIDs.length >= 1 && */onChange && !itemResult.isUpdating;\n const canClear = onClear && itemID !== '' && !itemResult.isUpdating;\n const canJump = (item !== null || itemIsMissing) && classConfigured && !itemResult.isUpdating && (onJump || jumpTo);\n\n let itemView: JSX.Element | null;\n let itemButtons: ButtonProps[] = [];\n\n if (hasItem) {\n itemView = <Item\n itemRef={{ classID, itemID, subregisterID }}\n itemData={item.data}\n />;\n } else {\n if (canAutoCreateRelatedItem) {\n itemButtons.push({\n onClick: handleCreateNew,\n icon: 'add',\n text: 'Auto create',\n intent: 'primary',\n });\n }\n if (itemIsMissing) {\n itemView = <span>Item not found: {itemID ?? 'N/A'}</span>;\n } else {\n itemView = <span>Item not specified</span>;\n }\n }\n\n const willShowItemView = hasItem || itemIsMissing || !onChange;\n\n if (canChangeRelatedItem) {\n itemButtons.push({\n onClick: () => setSelectDialogState(true),\n icon: 'edit',\n text: willShowItemView ? undefined : 'Specify',\n intent: 'primary',\n /*disabled: classIDs.length < 1,*/\n });\n }\n\n if (canClear) {\n itemButtons.push({ onClick: onClear, icon: 'cross', intent: 'danger' });\n }\n\n //log.debug(\"Rendering generic related item view: got item\", item);\n return (\n <ButtonGroup\n fill\n className={className}\n css={css`.bp4-button-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }`}>\n {classID\n ? <Button\n alignText=\"left\"\n css={css`width: 180px;`}\n title={`Item class: ${cfg.title ?? \"N/A\"}`}\n outlined disabled>\n {cfg.title ?? \"Class N/A\"}\n </Button>\n : null}\n {willShowItemView\n ? <Button\n alignText=\"left\"\n fill={hasItem} outlined\n disabled={!canJump}\n onClick={jump}\n loading={itemResult.isUpdating}\n title={hasItem\n ? `${cfg.title} (click to jump to item)`\n : undefined}>\n {itemView}\n </Button>\n : null}\n\n {itemButtons.map((props, idx) =>\n <Button key={idx} outlined {...props} />\n )}\n\n {onChange\n ? <RelatedItemSelectionDialog\n isOpen={selectDialogState}\n onClose={() => setSelectDialogState(false)}\n onChange={onChange}\n availableClassIDs={classIDs}\n />\n : null}\n </ButtonGroup>\n );\n};\n\n\nconst RelatedItemSelectionDialog: React.FC<{\n isOpen: boolean\n onClose: () => void\n onChange: (itemRef: InternalItemReference) => void\n availableClassIDs: string[]\n}> = function ({\n isOpen, onClose, onChange,\n availableClassIDs,\n}) {\n const { subregisters } = useContext(BrowserCtx);\n\n const classCriteria: Criterion[] = availableClassIDs.map(clsID => ({\n key: 'item-class',\n query: `objPath.indexOf(\\\"/${clsID}/\\\") >= 0`,\n }));\n\n const implicitCriteria: CriteriaGroup | undefined = classCriteria.length > 0\n ? {\n require: 'any',\n criteria: classCriteria,\n }\n : undefined;\n\n return (\n <Dialog\n isOpen={isOpen}\n onClose={onClose}\n enforceFocus={false}\n style={{ padding: '0', width: 'unset' }}>\n <Search\n style={{ height: '90vh', width: '90vw' }}\n availableClassIDs={availableClassIDs}\n implicitCriteria={implicitCriteria}\n stateName=\"superseding-item-selector-search\"\n onOpenItem={(itemPath) => {\n onChange(itemPathToItemRef(subregisters !== undefined, itemPath));\n onClose();\n }}\n />\n </Dialog>\n );\n}\n\n\nexport default GenericRelatedItemView;\n"]}
|
|
@@ -366,10 +366,11 @@ const ItemDetail = function ({
|
|
|
366
366
|
}, "Go to proposal") : null)
|
|
367
367
|
});
|
|
368
368
|
} else {
|
|
369
|
+
const desc = itemData === null || itemData === undefined ? "does not exist or could not be deserialized" : "may use unexpected data format";
|
|
369
370
|
return (0, _react2.jsx)(_core.NonIdealState, {
|
|
370
371
|
icon: "heart-broken",
|
|
371
372
|
title: "Unable to show item",
|
|
372
|
-
description:
|
|
373
|
+
description: `Item at ${itemPath} ${desc}`
|
|
373
374
|
});
|
|
374
375
|
}
|
|
375
376
|
}
|
|
@@ -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, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n Button, ButtonGroup,\n Card,\n Classes,\n FormGroup as BaseFormGroup,\n ControlGroup,\n InputGroup,\n NonIdealState,\n UL,\n H5,\n} from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport useItemRef from '../../hooks/useItemRef';\nimport useSingleRegisterItemData from '../../hooks/useSingleRegisterItemData';\nimport useItemClassConfig from '../../hooks/useItemClassConfig';\nimport { Protocols } from '../../protocolRegistry';\nimport {\n type ChangeProposal,\n type InternalItemReference,\n type RegisterItem,\n isRegisterItem,\n} from '../../../types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport {\n RegisterHelmet as Helmet,\n maybeEllipsizeString,\n TabContentsWithActions,\n} from '../../util';\nimport { itemRefToItemPath, crIDToCRPath, getCRIDFromProposedItemPath } from '../../itemPathUtils';\nimport { updateCRObjectChangeset, } from '../../change-request/objectChangeset';\nimport { ChangeRequestContext } from '../../change-request/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 ItemDetail: React.FC<{ uri: string, inProposalWithID?: string }> = function ({ uri, inProposalWithID }) {\n const { value: ref } = useItemRef(uri);\n const { value: clsConfig } = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n //const { value: itemData } = useSingleRegisterItemData(ref);\n const { updateObjects, makeRandomID, performOperation, operationKey } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const isBusy = operationKey !== undefined;\n const {\n jumpTo,\n subregisters,\n useRegisterItemData,\n activeChangeRequestID: globallyActiveCRID,\n } = useContext(BrowserCtx);\n\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n\n const itemClass = clsConfig;\n const itemClassID = itemClass?.meta?.id;\n const itemRef = ref ?? dummyRef;\n const { itemID, subregisterID } = itemRef;\n\n const _itemPath = `${itemClassID ?? 'NONEXISTENT_CLASS'}/${itemID}.yaml`;\n const itemPath = subregisterID ? `/subregisters/${subregisterID}/${_itemPath}` : `/${_itemPath}`;\n const itemRequest = {\n itemPaths: [itemPath],\n };\n const itemResponse = useRegisterItemData(itemRequest);\n const itemData = itemResponse.value[itemPath];\n\n const [ editedClarification, setEditedClarification ] = useState<RegisterItem<any>[\"data\"] | null>(null);\n\n //const [ diffMode, setDiffMode ] = useState<boolean>(false);\n // TODO: Implement diff mode\n const diffMode = false;\n\n const proposal = ((activeCR && activeCR.items[itemPath])\n ? activeCR.items[itemPath]\n : null) ?? null;\n\n const handleClearProposal = () => performProposalOperation(\"draft: clear proposal\", null);\n const handleRetire = () => performProposalOperation(\"draft: propose retirement\", {\n type: 'amendment',\n amendmentType: 'retirement',\n });\n const handleInvalidate = () => performProposalOperation(\"draft: propose invalidation\", {\n type: 'amendment',\n amendmentType: 'invalidation',\n });\n const handleSupersedeWith = (items: string[]) => performProposalOperation(\"draft: propose supersession\", {\n type: 'amendment',\n amendmentType: 'supersession',\n supersedingItemIDs: items,\n });\n const handleClarify = async () => {\n await performProposalOperation(\"draft: clarify item\", {\n type: 'clarification',\n });\n setEditedClarification(null);\n };\n const handleEditAddition = async () => {\n await performProposalOperation(\"draft: edit added item\", {\n type: 'addition',\n });\n setEditedClarification(null);\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(itemData)) {\n throw new Error(\"Proposal isn’t editable\")\n }\n if (proposal && proposal?.type !== 'amendment' && !editedClarification) {\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') && editedClarification)\n ? { [itemPath]: { ...itemData, data: editedClarification } }\n : {},\n ),\n // We need this because updateCRObjectChangeset\n // omits oldValue for item data payloads.\n _dangerouslySkipValidation: true,\n });\n }, [\n updateObjects,\n activeCRIsEditable,\n itemPath,\n JSON.stringify(activeCR),\n JSON.stringify(itemData),\n JSON.stringify(editedClarification),\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 || !itemClass || !isRegisterItem(itemData)) {\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: { ...itemData.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 any,\n { [newPath]: { type: 'addition' } },\n { [newPath]: newItem },\n ),\n _dangerouslySkipValidation: true,\n });\n if (activeCR.id === globallyActiveCRID) {\n spawnTab(`${Protocols.ITEM_DETAILS}:${itemRefToItemPath(newRef, activeCR.id)}`);\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 JSON.stringify(activeCR),\n JSON.stringify(itemData),\n ]);\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 let details: JSX.Element;\n\n if (editedClarification !== null && activeCRIsEditable) {\n const EditView = itemClass.views.editView;\n details = (\n <EditView\n itemData={editedClarification}\n itemRef={itemRef}\n onChange={!isBusy\n ? (newData) => {\n setEditedClarification(newData);\n }\n : undefined}\n />\n );\n\n } else {\n const DetailView = itemClass.views.detailView ?? itemClass.views.editView;\n details = (\n <DetailView\n itemRef={itemRef}\n itemData={itemData.data}\n />\n );\n }\n\n //const canAmend = activeCR && itemData.status === 'valid';\n const itemStatus =\n <FormGroup inline label=\"status:\" css={css`margin: 0;`}>\n <ControlGroup fill>\n <InputGroup\n value={proposal?.type === 'amendment'\n ? `${proposal.amendmentType} proposed`\n : proposal?.type === 'addition'\n ? \"addition proposed\"\n : itemData.status}\n intent={proposal?.type === 'amendment'\n ? 'warning'\n : proposal?.type === 'addition'\n ? 'primary'\n : itemData.status === 'valid'\n ? 'success'\n : undefined}\n leftIcon={proposal && (proposal.type === 'amendment' || proposal.type === 'addition')\n ? 'asterisk'\n : itemData.status === 'valid'\n ? 'tick'\n : itemData.status === 'invalid'\n ? 'ban-circle'\n : 'warning-sign'}\n readOnly\n />\n {activeCRIsEditable && !editedClarification\n ? <>\n {proposal?.type === 'addition'\n ? <Button\n intent=\"warning\"\n title=\"Remove the proposal to add this new item.\"\n disabled={isBusy}\n onClick={handleClearProposal}>\n Remove proposed addition\n </Button>\n : null}\n {proposal?.type === 'amendment'\n ? <Button\n intent=\"warning\"\n title={`Remove amendment (${proposal.amendmentType}) for this item from current proposal.`}\n disabled={isBusy}\n onClick={handleClearProposal}>\n Clear proposed amendment\n </Button>\n : !proposal && itemData.status === 'valid'\n ? <ButtonGroup>\n <Button\n intent=\"primary\"\n disabled={isBusy}\n onClick={handleRetire}>\n Retire\n </Button>\n <Button\n intent=\"primary\"\n disabled={isBusy}\n onClick={handleInvalidate}>\n Invalidate\n </Button>\n </ButtonGroup>\n : null}\n </>\n : null}\n </ControlGroup>\n </FormGroup>;\n\n const supersedingItems = (\n // It’s superseded (whether in current proposal or not)\n itemData.status === 'superseded'\n // Item is valid, proposal is editable, and no change to this item is proposed yet\n || (activeCRIsEditable && !proposal && !editedClarification && itemData.status === 'valid')\n // This item is being superseded in active proposal\n // XXX: Redundant condition with the first one?\n || (proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'))\n ? <FormGroup inline label=\"superseded by: \" css={css`margin: 0;`}>\n <RelatedItems\n availableClassIDs={[itemClass.meta.id]}\n itemRefs={proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'\n ? proposal.supersedingItemIDs.\n map(id => ({ itemID: id, classID: itemClass.meta.id, subregisterID }))\n : (itemData.supersededBy ?? [])}\n onChange={!isBusy && activeCRIsEditable && (\n (proposal?.type === 'amendment' && proposal.amendmentType === 'supersession') ||\n (!proposal && itemData.status === 'valid'))\n ? (items) => items.length > 0\n ? handleSupersedeWith(items.map(ref => ref.itemID))\n : handleClearProposal()\n : undefined}\n />\n </FormGroup>\n : null;\n\n const clarificationHasChanges = JSON.stringify(editedClarification) !== JSON.stringify(itemData.data);\n\n const clarificationAction = (\n (proposal && proposal?.type !== 'amendment')\n || (activeCRIsEditable && !proposal && itemData.status === 'valid'))\n ? <FormGroup inline label={`${proposal?.type ?? \"clarification\"}: `} css={css`margin: 0;`}>\n {activeCRIsEditable\n ? <ButtonGroup>\n {editedClarification\n ? <>\n <Button\n intent={clarificationHasChanges ? \"primary\" : undefined}\n // TODO(perf): this is expensive if renders are frequent…\n disabled={!clarificationHasChanges || isBusy}\n onClick={(!proposal || proposal?.type === 'clarification')\n ? handleClarify\n : handleEditAddition}>\n Save\n </Button>\n <Button onClick={() => setEditedClarification(null)}>Do not save</Button>\n </>\n : <>\n <Button\n disabled={diffMode || isBusy}\n intent=\"primary\"\n outlined\n onClick={() => setEditedClarification(itemData.data)}>\n {!proposal ? \"Clarify\" : \"Edit\"}\n </Button>\n {proposal?.type === 'clarification'\n ? <>\n <Button\n disabled={diffMode || isBusy || proposal?.type !== 'clarification'}\n intent=\"warning\"\n onClick={handleClearProposal}>\n Clear\n </Button>\n </>\n : null}\n </>}\n </ButtonGroup>\n : <Button disabled>\n {proposal?.type === 'clarification' ? \"Clarified\" : \"Added\"} in active proposal\n </Button>}\n </FormGroup>\n : null;\n\n const proposeLikeThis = activeCRIsEditable && !editedClarification\n ? <Button\n title=\"Propose a new item in current proposal, using this item as template.\"\n icon='plus'\n disabled={isBusy}\n outlined\n onClick={performOperation('duplicating item', handleProposeLikeThis)}>\n Propose another like this\n </Button>\n : null;\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'} #${itemData.id}`;\n\n return (\n <TabContentsWithActions\n actions={<>\n <FormGroup\n inline\n labelInfo={<HelpTooltip\n icon='info-sign'\n content={<>\n <H5>{itemClass.meta.title}</H5>\n {itemClass.meta.description ?? \"No description is provided for this register item class.\"}\n <UL>\n <li>Class ID: {itemClassID}</li>\n <li>Subregister ID: {subregisterID ?? 'N/A'}</li>\n <li>UUID: {itemID}</li>\n </UL>\n </>}\n />}\n label={<>\n <strong>{itemClass.meta.title}</strong>\n {subregisterID\n ? <span title=\"Subregister\"> in {subregisters?.[subregisterID]?.title ?? subregisterID}</span>\n : null}\n </>}\n css={css`margin: 0; .bp4-form-content { display: flex; flex-flow: row wrap; gap: 10px; }`}>\n {itemStatus}\n {supersedingItems}\n {clarificationAction}\n {proposeLikeThis}\n </FormGroup>\n </>}\n main={\n <Card css={css`position: absolute; inset: ${inProposalWithID ? '0' : '10px'}; overflow-y: auto;`}>\n <Helmet><title>{windowTitle}</title></Helmet>\n {details}\n </Card>\n }\n />\n );\n\n } else if (itemResponse.isUpdating) {\n return <div className={Classes.SKELETON}>Loading…</div>;\n\n } else {\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 return <NonIdealState\n icon=\"heart-broken\"\n title=\"Unable to show item\"\n description=\"Item may not exist, or use unexpected data format.\"\n />;\n }\n }\n};\n\n\nconst ItemTitle: React.FC<{ uri: string }> = function ({ uri }) {\n const { value: ref } = useItemRef(uri);\n const { value: clsConfig } = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n const { value: itemData } = useSingleRegisterItemData(ref);\n const fallbackView = (() => <>{ref?.itemID ?? uri}</>);\n const View = itemData ? (clsConfig?.views.listItemView ?? fallbackView) : fallbackView;\n return <View\n itemRef={ref ?? dummyRef}\n itemData={itemData}\n />;\n}\n\n\nexport default {\n main: ItemDetail,\n title: ItemTitle,\n};\n\n\nconst dummyRef: InternalItemReference = {\n itemID: 'NONEXISTENT_ITEM_ID',\n classID: 'NONEXISTENT_CLASS_ID',\n subregisterID: undefined,\n};\n\n\nconst FormGroup = styled(BaseFormGroup)`\n margin: 0;\n label.bp4-label {\n white-space: nowrap;\n }\n`;\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, useCallback } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n Button, ButtonGroup,\n Card,\n Classes,\n FormGroup as BaseFormGroup,\n ControlGroup,\n InputGroup,\n NonIdealState,\n UL,\n H5,\n} from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport HelpTooltip from '@riboseinc/paneron-extension-kit/widgets/HelpTooltip';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport useItemRef from '../../hooks/useItemRef';\nimport useSingleRegisterItemData from '../../hooks/useSingleRegisterItemData';\nimport useItemClassConfig from '../../hooks/useItemClassConfig';\nimport { Protocols } from '../../protocolRegistry';\nimport {\n type ChangeProposal,\n type InternalItemReference,\n type RegisterItem,\n isRegisterItem,\n} from '../../../types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport {\n RegisterHelmet as Helmet,\n maybeEllipsizeString,\n TabContentsWithActions,\n} from '../../util';\nimport { itemRefToItemPath, crIDToCRPath, getCRIDFromProposedItemPath } from '../../itemPathUtils';\nimport { updateCRObjectChangeset, } from '../../change-request/objectChangeset';\nimport { ChangeRequestContext } from '../../change-request/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 ItemDetail: React.FC<{ uri: string, inProposalWithID?: string }> = function ({ uri, inProposalWithID }) {\n const { value: ref } = useItemRef(uri);\n const { value: clsConfig } = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n //const { value: itemData } = useSingleRegisterItemData(ref);\n const { updateObjects, makeRandomID, performOperation, operationKey } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const isBusy = operationKey !== undefined;\n const {\n jumpTo,\n subregisters,\n useRegisterItemData,\n activeChangeRequestID: globallyActiveCRID,\n } = useContext(BrowserCtx);\n\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n\n const itemClass = clsConfig;\n const itemClassID = itemClass?.meta?.id;\n const itemRef = ref ?? dummyRef;\n const { itemID, subregisterID } = itemRef;\n\n const _itemPath = `${itemClassID ?? 'NONEXISTENT_CLASS'}/${itemID}.yaml`;\n const itemPath = subregisterID ? `/subregisters/${subregisterID}/${_itemPath}` : `/${_itemPath}`;\n const itemRequest = {\n itemPaths: [itemPath],\n };\n const itemResponse = useRegisterItemData(itemRequest);\n const itemData = itemResponse.value[itemPath];\n\n const [ editedClarification, setEditedClarification ] = useState<RegisterItem<any>[\"data\"] | null>(null);\n\n //const [ diffMode, setDiffMode ] = useState<boolean>(false);\n // TODO: Implement diff mode\n const diffMode = false;\n\n const proposal = ((activeCR && activeCR.items[itemPath])\n ? activeCR.items[itemPath]\n : null) ?? null;\n\n const handleClearProposal = () => performProposalOperation(\"draft: clear proposal\", null);\n const handleRetire = () => performProposalOperation(\"draft: propose retirement\", {\n type: 'amendment',\n amendmentType: 'retirement',\n });\n const handleInvalidate = () => performProposalOperation(\"draft: propose invalidation\", {\n type: 'amendment',\n amendmentType: 'invalidation',\n });\n const handleSupersedeWith = (items: string[]) => performProposalOperation(\"draft: propose supersession\", {\n type: 'amendment',\n amendmentType: 'supersession',\n supersedingItemIDs: items,\n });\n const handleClarify = async () => {\n await performProposalOperation(\"draft: clarify item\", {\n type: 'clarification',\n });\n setEditedClarification(null);\n };\n const handleEditAddition = async () => {\n await performProposalOperation(\"draft: edit added item\", {\n type: 'addition',\n });\n setEditedClarification(null);\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(itemData)) {\n throw new Error(\"Proposal isn’t editable\")\n }\n if (proposal && proposal?.type !== 'amendment' && !editedClarification) {\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') && editedClarification)\n ? { [itemPath]: { ...itemData, data: editedClarification } }\n : {},\n ),\n // We need this because updateCRObjectChangeset\n // omits oldValue for item data payloads.\n _dangerouslySkipValidation: true,\n });\n }, [\n updateObjects,\n activeCRIsEditable,\n itemPath,\n JSON.stringify(activeCR),\n JSON.stringify(itemData),\n JSON.stringify(editedClarification),\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 || !itemClass || !isRegisterItem(itemData)) {\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: { ...itemData.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 any,\n { [newPath]: { type: 'addition' } },\n { [newPath]: newItem },\n ),\n _dangerouslySkipValidation: true,\n });\n if (activeCR.id === globallyActiveCRID) {\n spawnTab(`${Protocols.ITEM_DETAILS}:${itemRefToItemPath(newRef, activeCR.id)}`);\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 JSON.stringify(activeCR),\n JSON.stringify(itemData),\n ]);\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 let details: JSX.Element;\n\n if (editedClarification !== null && activeCRIsEditable) {\n const EditView = itemClass.views.editView;\n details = (\n <EditView\n itemData={editedClarification}\n itemRef={itemRef}\n onChange={!isBusy\n ? (newData) => {\n setEditedClarification(newData);\n }\n : undefined}\n />\n );\n\n } else {\n const DetailView = itemClass.views.detailView ?? itemClass.views.editView;\n details = (\n <DetailView\n itemRef={itemRef}\n itemData={itemData.data}\n />\n );\n }\n\n //const canAmend = activeCR && itemData.status === 'valid';\n const itemStatus =\n <FormGroup inline label=\"status:\" css={css`margin: 0;`}>\n <ControlGroup fill>\n <InputGroup\n value={proposal?.type === 'amendment'\n ? `${proposal.amendmentType} proposed`\n : proposal?.type === 'addition'\n ? \"addition proposed\"\n : itemData.status}\n intent={proposal?.type === 'amendment'\n ? 'warning'\n : proposal?.type === 'addition'\n ? 'primary'\n : itemData.status === 'valid'\n ? 'success'\n : undefined}\n leftIcon={proposal && (proposal.type === 'amendment' || proposal.type === 'addition')\n ? 'asterisk'\n : itemData.status === 'valid'\n ? 'tick'\n : itemData.status === 'invalid'\n ? 'ban-circle'\n : 'warning-sign'}\n readOnly\n />\n {activeCRIsEditable && !editedClarification\n ? <>\n {proposal?.type === 'addition'\n ? <Button\n intent=\"warning\"\n title=\"Remove the proposal to add this new item.\"\n disabled={isBusy}\n onClick={handleClearProposal}>\n Remove proposed addition\n </Button>\n : null}\n {proposal?.type === 'amendment'\n ? <Button\n intent=\"warning\"\n title={`Remove amendment (${proposal.amendmentType}) for this item from current proposal.`}\n disabled={isBusy}\n onClick={handleClearProposal}>\n Clear proposed amendment\n </Button>\n : !proposal && itemData.status === 'valid'\n ? <ButtonGroup>\n <Button\n intent=\"primary\"\n disabled={isBusy}\n onClick={handleRetire}>\n Retire\n </Button>\n <Button\n intent=\"primary\"\n disabled={isBusy}\n onClick={handleInvalidate}>\n Invalidate\n </Button>\n </ButtonGroup>\n : null}\n </>\n : null}\n </ControlGroup>\n </FormGroup>;\n\n const supersedingItems = (\n // It’s superseded (whether in current proposal or not)\n itemData.status === 'superseded'\n // Item is valid, proposal is editable, and no change to this item is proposed yet\n || (activeCRIsEditable && !proposal && !editedClarification && itemData.status === 'valid')\n // This item is being superseded in active proposal\n // XXX: Redundant condition with the first one?\n || (proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'))\n ? <FormGroup inline label=\"superseded by: \" css={css`margin: 0;`}>\n <RelatedItems\n availableClassIDs={[itemClass.meta.id]}\n itemRefs={proposal?.type === 'amendment' && proposal.amendmentType === 'supersession'\n ? proposal.supersedingItemIDs.\n map(id => ({ itemID: id, classID: itemClass.meta.id, subregisterID }))\n : (itemData.supersededBy ?? [])}\n onChange={!isBusy && activeCRIsEditable && (\n (proposal?.type === 'amendment' && proposal.amendmentType === 'supersession') ||\n (!proposal && itemData.status === 'valid'))\n ? (items) => items.length > 0\n ? handleSupersedeWith(items.map(ref => ref.itemID))\n : handleClearProposal()\n : undefined}\n />\n </FormGroup>\n : null;\n\n const clarificationHasChanges = JSON.stringify(editedClarification) !== JSON.stringify(itemData.data);\n\n const clarificationAction = (\n (proposal && proposal?.type !== 'amendment')\n || (activeCRIsEditable && !proposal && itemData.status === 'valid'))\n ? <FormGroup inline label={`${proposal?.type ?? \"clarification\"}: `} css={css`margin: 0;`}>\n {activeCRIsEditable\n ? <ButtonGroup>\n {editedClarification\n ? <>\n <Button\n intent={clarificationHasChanges ? \"primary\" : undefined}\n // TODO(perf): this is expensive if renders are frequent…\n disabled={!clarificationHasChanges || isBusy}\n onClick={(!proposal || proposal?.type === 'clarification')\n ? handleClarify\n : handleEditAddition}>\n Save\n </Button>\n <Button onClick={() => setEditedClarification(null)}>Do not save</Button>\n </>\n : <>\n <Button\n disabled={diffMode || isBusy}\n intent=\"primary\"\n outlined\n onClick={() => setEditedClarification(itemData.data)}>\n {!proposal ? \"Clarify\" : \"Edit\"}\n </Button>\n {proposal?.type === 'clarification'\n ? <>\n <Button\n disabled={diffMode || isBusy || proposal?.type !== 'clarification'}\n intent=\"warning\"\n onClick={handleClearProposal}>\n Clear\n </Button>\n </>\n : null}\n </>}\n </ButtonGroup>\n : <Button disabled>\n {proposal?.type === 'clarification' ? \"Clarified\" : \"Added\"} in active proposal\n </Button>}\n </FormGroup>\n : null;\n\n const proposeLikeThis = activeCRIsEditable && !editedClarification\n ? <Button\n title=\"Propose a new item in current proposal, using this item as template.\"\n icon='plus'\n disabled={isBusy}\n outlined\n onClick={performOperation('duplicating item', handleProposeLikeThis)}>\n Propose another like this\n </Button>\n : null;\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'} #${itemData.id}`;\n\n return (\n <TabContentsWithActions\n actions={<>\n <FormGroup\n inline\n labelInfo={<HelpTooltip\n icon='info-sign'\n content={<>\n <H5>{itemClass.meta.title}</H5>\n {itemClass.meta.description ?? \"No description is provided for this register item class.\"}\n <UL>\n <li>Class ID: {itemClassID}</li>\n <li>Subregister ID: {subregisterID ?? 'N/A'}</li>\n <li>UUID: {itemID}</li>\n </UL>\n </>}\n />}\n label={<>\n <strong>{itemClass.meta.title}</strong>\n {subregisterID\n ? <span title=\"Subregister\"> in {subregisters?.[subregisterID]?.title ?? subregisterID}</span>\n : null}\n </>}\n css={css`margin: 0; .bp4-form-content { display: flex; flex-flow: row wrap; gap: 10px; }`}>\n {itemStatus}\n {supersedingItems}\n {clarificationAction}\n {proposeLikeThis}\n </FormGroup>\n </>}\n main={\n <Card css={css`position: absolute; inset: ${inProposalWithID ? '0' : '10px'}; overflow-y: auto;`}>\n <Helmet><title>{windowTitle}</title></Helmet>\n {details}\n </Card>\n }\n />\n );\n\n } else if (itemResponse.isUpdating) {\n return <div className={Classes.SKELETON}>Loading…</div>;\n\n } else {\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\n\nconst ItemTitle: React.FC<{ uri: string }> = function ({ uri }) {\n const { value: ref } = useItemRef(uri);\n const { value: clsConfig } = useItemClassConfig(ref?.classID ?? 'NONEXISTENT_CLASS_ID');\n const { value: itemData } = useSingleRegisterItemData(ref);\n const fallbackView = (() => <>{ref?.itemID ?? uri}</>);\n const View = itemData ? (clsConfig?.views.listItemView ?? fallbackView) : fallbackView;\n return <View\n itemRef={ref ?? dummyRef}\n itemData={itemData}\n />;\n}\n\n\nexport default {\n main: ItemDetail,\n title: ItemTitle,\n};\n\n\nconst dummyRef: InternalItemReference = {\n itemID: 'NONEXISTENT_ITEM_ID',\n classID: 'NONEXISTENT_CLASS_ID',\n subregisterID: undefined,\n};\n\n\nconst FormGroup = styled(BaseFormGroup)`\n margin: 0;\n label.bp4-label {\n white-space: nowrap;\n }\n`;\n"]}
|