@riboseinc/paneron-registry-kit 2.0.10 → 2.1.0
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.js +8 -14
- package/index.js.map +1 -1
- package/migrations/initial.d.ts +3 -3
- package/migrations/initial.js +27 -7
- package/migrations/initial.js.map +1 -1
- package/package.json +2 -4
- package/site-builder/index.d.ts +6 -0
- package/site-builder/index.js +29 -0
- package/site-builder/index.js.map +1 -0
- package/site-builder/jsx-runtime.d.ts +18 -0
- package/site-builder/jsx-runtime.js +107 -0
- package/site-builder/jsx-runtime.js.map +1 -0
- package/site-builder/page.d.ts +6 -0
- package/site-builder/page.js +22 -0
- package/site-builder/page.js.map +1 -0
- package/types/item.d.ts +0 -8
- package/types/item.js.map +1 -1
- package/views/BrowserCtx.d.ts +4 -0
- package/views/BrowserCtx.js.map +1 -1
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js +23 -15
- package/views/FilterCriteria/CRITERIA_CONFIGURATION.js.map +1 -1
- package/views/FilterCriteria/criteriaToNodes.js +3 -1
- package/views/FilterCriteria/criteriaToNodes.js.map +1 -1
- package/views/FilterCriteria/index.js +4 -4
- package/views/FilterCriteria/index.js.map +1 -1
- package/views/GenericRelatedItemView.js +8 -7
- package/views/GenericRelatedItemView.js.map +1 -1
- package/views/RegisterStakeholder.js +3 -1
- package/views/RegisterStakeholder.js.map +1 -1
- package/views/SearchQuery.js +1 -1
- package/views/SearchQuery.js.map +1 -1
- package/views/change-request/ChangeRequestContext.js +3 -3
- package/views/change-request/ChangeRequestContext.js.map +1 -1
- package/views/change-request/Proposals.js +38 -30
- package/views/change-request/Proposals.js.map +1 -1
- package/views/change-request/objectChangeset.js +5 -3
- package/views/change-request/objectChangeset.js.map +1 -1
- package/views/detail/ChangeRequest/index.js +16 -14
- package/views/detail/ChangeRequest/index.js.map +1 -1
- package/views/detail/ChangeRequest/transitions.js +18 -12
- package/views/detail/ChangeRequest/transitions.js.map +1 -1
- package/views/detail/CustomView/index.js +6 -2
- package/views/detail/CustomView/index.js.map +1 -1
- package/views/detail/RegisterHome/index.js +6 -5
- package/views/detail/RegisterHome/index.js.map +1 -1
- package/views/detail/RegisterItem/RelatedItems.js.map +1 -1
- package/views/detail/RegisterItem/SupersedingItemMenu.js.map +1 -1
- package/views/detail/RegisterItem/index.js +23 -19
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/detail/RegisterMeta/RegisterMetaForm.js +10 -10
- package/views/detail/RegisterMeta/RegisterMetaForm.js.map +1 -1
- package/views/detail/RegisterMeta/index.js +1 -1
- package/views/detail/RegisterMeta/index.js.map +1 -1
- package/views/detail/index.js +3 -3
- package/views/detail/index.js.map +1 -1
- package/views/diffing/StructuredDiff.js +1 -1
- package/views/diffing/StructuredDiff.js.map +1 -1
- package/views/hooks/useItemRef.js +3 -3
- package/views/hooks/useItemRef.js.map +1 -1
- package/views/hooks/useSingleRegisterItemData.js +3 -1
- package/views/hooks/useSingleRegisterItemData.js.map +1 -1
- package/views/index.js +11 -8
- package/views/index.js.map +1 -1
- package/views/itemPathUtils.js +5 -3
- package/views/itemPathUtils.js.map +1 -1
- package/views/sidebar/Browse/index.js +18 -16
- package/views/sidebar/Browse/index.js.map +1 -1
- package/views/sidebar/Export/index.js +3 -3
- package/views/sidebar/Export/index.js.map +1 -1
- package/views/sidebar/ListItem.js.map +1 -1
- package/views/sidebar/Registration/index.js.map +1 -1
- package/views/sidebar/Search/index.js +7 -5
- package/views/sidebar/Search/index.js.map +1 -1
- package/views/util.js +3 -1
- package/views/util.js.map +1 -1
- package/views/detail/ChangeRequest/Proposal.d.ts +0 -0
- package/views/detail/ChangeRequest/Proposal.js +0 -142
- package/views/detail/ChangeRequest/Proposal.js.map +0 -1
package/views/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useState, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\n\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport TabbedWorkspace, { type TabbedWorkspaceProps } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace';\nimport {\n makeContextProvider as makeTabbedWorkspaceContextProvider,\n TabbedWorkspaceContext,\n} from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\n\nimport {\n type RegisterItem,\n type RegisterItemDataHook,\n type RegisterStakeholder,\n type RegistryViewProps,\n isRegisterItem,\n isRegisterMetadata,\n isInternalItemReference,\n} from '../types';\n\nimport { REGISTER_METADATA_FILENAME } from '../common';\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\nimport { sidebarConfig, SidebarID, sidebarIDs } from './sidebar';\nimport { BrowserCtx } from './BrowserCtx';\nimport { _getRelatedClass } from './util';\nimport RegisterHome from './detail/RegisterHome';\nimport protocolRegistry, { Protocols, type Protocol } from './protocolRegistry';\nimport {\n ChangeRequestContext,\n ChangeRequestContextProvider,\n} from './change-request/ChangeRequestContext';\nimport { itemPathInCR, itemPathToItemRefLike } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, SidebarID>(\n 'Browse',\n sidebarIDs,\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> = function (props) {\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <RegistryWorkspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nconst SIDEBAR_WIDTH_SETTING_NAME = 'registryMainSidebarWidthPixels'\n\n\nconst RegistryWorkspace: React.FC<Record<never, never>> = function () {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\n\n const globalMode: TabbedWorkspaceProps<any>['globalMode'] = useMemo(\n (() => activeChangeRequest\n ? {\n content: <>\n Viewing register as proposed — contents shown may differ from version in effect\n </>,\n intent: 'danger',\n onClick: () => spawnTab(`${Protocols.CHANGE_REQUEST}:/proposals/${activeChangeRequest.id}/main.yaml`),\n }\n : undefined),\n [activeChangeRequest?.id],\n );\n\n const { value: { settings } } = useSettings();\n const { value: { settings: globalSettings } } = useGlobalSettings();\n\n const stored = settings[SIDEBAR_WIDTH_SETTING_NAME]\n const sidebarWidth: number | undefined = stored && typeof stored === 'number'\n ? stored as number\n : undefined;\n\n return <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={sidebarConfig}\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={sidebarIDs}\n newTabPrompt={<RegisterHome />}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={(width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }}\n />\n};\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function ({\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n customViews,\n children,\n}) {\n\n const { useObjectData, useRemoteUsername } = useContext(DatasetContext);\n const { focusedTabURI, spawnTab } = useContext(TabbedWorkspaceContext);\n\n const selectedItemPath: string | null =\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.ITEM_DETAILS}:`)\n ? focusedTabURI.split(':')[1]\n : null;\n\n const selectedItemRef: Record<string, string> | null =\n selectedItemPath\n ? itemPathToItemRefLike(subregisters !== undefined, selectedItemPath)\n : null;\n\n const maybeSelectedRegisterItemData: Record<string, any> | null = useObjectData({\n objectPaths: selectedItemPath ? [selectedItemPath] : [],\n }).value.data[selectedItemPath ?? ''];\n\n const selectedRegisterItem: BrowserCtx['selectedRegisterItem'] =\n isInternalItemReference(selectedItemRef)\n ? maybeSelectedRegisterItemData &&\n isRegisterItem(maybeSelectedRegisterItemData)\n ? {\n item: maybeSelectedRegisterItemData,\n ref: selectedItemRef,\n itemClass: itemClassConfiguration[selectedItemRef.classID],\n }\n : undefined\n : null;\n\n // TODO: Confirm that end extensions using RegistryKit can’t just import hooks\n // from RegistryKit and we really have to pass this to them via context\n // TODO: Why not use useObjectData directly? Since register item paths\n // are just object paths. The casting here is optimistic, since an item at given path\n // may not be a RegisterItem.\n const useRegisterItemData: RegisterItemDataHook = (opts) => {\n // Original item path mapped to its potential alternative path in current CR,\n // if the item is clarified or added in it.\n // TODO(perf): Access CR data and check whether the item is affected instead of blindly trying CR paths\n const pathsToRequest: Record<string, string> = {};\n\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\n\n for (const givenItemPath of opts.itemPaths) {\n pathsToRequest[givenItemPath] = givenItemPath;\n\n // Don’t use CR alternative path for any path that is already explicitly in-CR.\n // TODO(perf): move out of the loop what’s possible, use map-reduce maybe too\n if (!opts.ignoreActiveCR && !givenItemPath.startsWith('/proposals') && activeChangeRequest?.id) {\n pathsToRequest[itemPathInCR(givenItemPath, activeChangeRequest.id)] = givenItemPath;\n }\n }\n\n const result = useObjectData({\n objectPaths: Object.keys(pathsToRequest),\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData: Record<string, RegisterItem<any> | null> = {};\n for (const [alternativePath, itemPath] of Object.entries(pathsToRequest)) {\n const data = result.value.data[alternativePath]\n ?? result.value.data[itemPath]\n ?? null;\n if (isRegisterItem(data) || data === null) {\n itemData[itemPath] = data;\n }\n }\n\n // Convert dates\n // const parsedData: Record<string, RegisterItem<any> | null> = Object.entries(result.value.data).\n // map(([ path, data ]) => {\n // return {\n // [path]: data !== null\n // ? {\n // ...data,\n // dateAccepted: parseISO(data!.dateAccepted as unknown as string),\n // }\n // : null,\n // };\n // }).\n // reduce((p, c) => ({ ...p, ...c }), {});\n\n return {\n ...result,\n value: itemData,\n };\n };\n\n\n // Register data\n\n const registerMetadataReq = useObjectData({\n objectPaths: [REGISTER_METADATA_FILENAME],\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n const maybeRegisterMetadata =\n registerMetadataReq.value.data?.[REGISTER_METADATA_FILENAME] ??\n (registerMetadataReq.isUpdating ? undefined : null);\n const registerMetadata = !maybeRegisterMetadata || isRegisterMetadata(maybeRegisterMetadata)\n ? maybeRegisterMetadata\n : null;\n\n const remoteUsername: string | undefined = useRemoteUsername().value.username;\n\n const stakeholder: RegisterStakeholder | undefined = remoteUsername\n ? (registerMetadata?.stakeholders ?? []).\n find(s => s.gitServerUsername === remoteUsername)\n : undefined;\n\n\n // Active CR\n\n const [ activeChangeRequestID, setActiveChangeRequestID ] = useState<string | null>(null);\n\n const getRelatedClass = _getRelatedClass(itemClassConfiguration);\n\n return (\n <BrowserCtx.Provider\n value={{\n stakeholder,\n registerMetadata,\n\n subregisters,\n itemClasses: itemClassConfiguration,\n\n jumpTo: spawnTab,\n\n selectedRegisterItem,\n\n activeChangeRequestID,\n setActiveChangeRequestID,\n\n useRegisterItemData,\n getRelatedItemClassConfiguration: getRelatedClass,\n customViews: customViews ?? [],\n\n keyExpression,\n defaultSearchCriteria,\n }}>\n <ChangeRequestContextProvider changeRequestID={activeChangeRequestID}>\n {children}\n </ChangeRequestContextProvider>\n </BrowserCtx.Provider>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/views/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useState, useMemo } from 'react';\nimport { jsx, css } from '@emotion/react';\n\nimport { ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport TabbedWorkspace, { type TabbedWorkspaceProps } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace';\nimport {\n makeContextProvider as makeTabbedWorkspaceContextProvider,\n TabbedWorkspaceContext,\n} from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\n\nimport {\n type RegisterItem,\n type RegisterItemDataHook,\n type RegisterStakeholder,\n type RegistryViewProps,\n isRegisterItem,\n isRegisterMetadata,\n isInternalItemReference,\n} from '../types';\n\nimport { REGISTER_METADATA_FILENAME } from '../common';\n\nimport GenericRelatedItemView from './GenericRelatedItemView';\nimport { sidebarConfig, SidebarID, sidebarIDs } from './sidebar';\nimport { BrowserCtx } from './BrowserCtx';\nimport { _getRelatedClass } from './util';\nimport RegisterHome from './detail/RegisterHome';\nimport protocolRegistry, { Protocols, type Protocol } from './protocolRegistry';\nimport {\n ChangeRequestContext,\n ChangeRequestContextProvider,\n} from './change-request/ChangeRequestContext';\nimport { itemPathInCR, itemPathToItemRefLike } from './itemPathUtils';\nexport { GenericRelatedItemView };\n\n\nconst TabbedWorkspaceContextProvider = makeTabbedWorkspaceContextProvider<Protocol, SidebarID>(\n 'Browse',\n sidebarIDs,\n protocolRegistry);\n\n\nexport const RegistryView: React.FC<RegistryViewProps> = function (props) {\n return (\n <TabbedWorkspaceContextProvider stateKey=\"main-registry-view\">\n <BrowserCtxProvider {...props}>\n <RegistryWorkspace />\n </BrowserCtxProvider>\n </TabbedWorkspaceContextProvider>\n );\n};\n\n\nconst SIDEBAR_WIDTH_SETTING_NAME = 'registryMainSidebarWidthPixels'\n\n\nconst RegistryWorkspace: React.FC<Record<never, never>> = function () {\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { useSettings, updateSetting, useGlobalSettings } = useContext(DatasetContext);\n\n const globalMode: TabbedWorkspaceProps<any>['globalMode'] = useMemo(\n (() => activeChangeRequest\n ? {\n content: <>\n Viewing register as proposed — contents shown may differ from version in effect\n </>,\n intent: 'danger',\n onClick: () => spawnTab(`${Protocols.CHANGE_REQUEST}:/proposals/${activeChangeRequest.id}/main.yaml`),\n }\n : undefined),\n [activeChangeRequest?.id],\n );\n\n const { value: { settings } } = useSettings();\n const { value: { settings: globalSettings } } = useGlobalSettings();\n\n const stored = settings[SIDEBAR_WIDTH_SETTING_NAME]\n const sidebarWidth: number | undefined = stored && typeof stored === 'number'\n ? stored as number\n : undefined;\n\n return <TabbedWorkspace\n css={css`flex: 1 1 auto;`}\n sidebarConfig={sidebarConfig}\n sidebarPosition={globalSettings.sidebarPosition}\n sidebarIDs={sidebarIDs}\n newTabPrompt={<RegisterHome />}\n globalMode={globalMode}\n sidebarWidth={sidebarWidth}\n onSidebarResize={(width) => {\n updateSetting({ key: SIDEBAR_WIDTH_SETTING_NAME, value: width })\n }}\n />\n};\n\n\nconst BrowserCtxProvider: React.FC<RegistryViewProps> = function ({\n itemClassConfiguration,\n subregisters,\n keyExpression,\n defaultSearchCriteria,\n customViews,\n children,\n}) {\n\n const { useObjectData, useRemoteUsername } = useContext(DatasetContext);\n const { focusedTabURI, spawnTab } = useContext(TabbedWorkspaceContext);\n\n const selectedItemPath: string | null =\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.ITEM_DETAILS}:`)\n ? focusedTabURI.split(':')[1]\n : null;\n\n const selectedItemRef: Record<string, string> | null =\n selectedItemPath\n ? itemPathToItemRefLike(subregisters !== undefined, selectedItemPath)\n : null;\n\n const maybeSelectedRegisterItemData: Record<string, any> | null = useObjectData({\n objectPaths: selectedItemPath ? [selectedItemPath] : [],\n }).value.data[selectedItemPath ?? ''];\n\n const selectedRegisterItem: BrowserCtx['selectedRegisterItem'] =\n isInternalItemReference(selectedItemRef)\n ? maybeSelectedRegisterItemData &&\n isRegisterItem(maybeSelectedRegisterItemData)\n ? {\n item: maybeSelectedRegisterItemData,\n ref: selectedItemRef,\n itemClass: itemClassConfiguration[selectedItemRef.classID],\n }\n : undefined\n : null;\n\n // TODO: Confirm that end extensions using RegistryKit can’t just import hooks\n // from RegistryKit and we really have to pass this to them via context\n // TODO: Why not use useObjectData directly? Since register item paths\n // are just object paths. The casting here is optimistic, since an item at given path\n // may not be a RegisterItem.\n const useRegisterItemData: RegisterItemDataHook = (opts) => {\n // Original item path mapped to its potential alternative path in current CR,\n // if the item is clarified or added in it.\n // TODO(perf): Access CR data and check whether the item is affected instead of blindly trying CR paths\n const pathsToRequest: Record<string, string> = {};\n\n const { changeRequest: activeChangeRequest } = useContext(ChangeRequestContext);\n\n\n for (const givenItemPath of opts.itemPaths) {\n pathsToRequest[givenItemPath] = givenItemPath;\n\n // Don’t use CR alternative path for any path that is already explicitly in-CR.\n // TODO(perf): move out of the loop what’s possible, use map-reduce maybe too\n if (!opts.ignoreActiveCR && !givenItemPath.startsWith('/proposals') && activeChangeRequest?.id) {\n pathsToRequest[itemPathInCR(givenItemPath, activeChangeRequest.id)] = givenItemPath;\n }\n }\n\n const result = useObjectData({\n objectPaths: Object.keys(pathsToRequest),\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n\n const itemData: Record<string, RegisterItem<any> | null> = {};\n for (const [alternativePath, itemPath] of Object.entries(pathsToRequest)) {\n const data = result.value.data[alternativePath]\n ?? result.value.data[itemPath]\n ?? null;\n if (isRegisterItem(data) || data === null) {\n itemData[itemPath] = data;\n }\n }\n\n // Convert dates\n // const parsedData: Record<string, RegisterItem<any> | null> = Object.entries(result.value.data).\n // map(([ path, data ]) => {\n // return {\n // [path]: data !== null\n // ? {\n // ...data,\n // dateAccepted: parseISO(data!.dateAccepted as unknown as string),\n // }\n // : null,\n // };\n // }).\n // reduce((p, c) => ({ ...p, ...c }), {});\n\n return {\n ...result,\n value: itemData,\n };\n };\n\n\n // Register data\n\n const registerMetadataReq = useObjectData({\n objectPaths: [REGISTER_METADATA_FILENAME],\n }) as ValueHook<{ data: Record<string, Record<string, any> | null> }>;\n const maybeRegisterMetadata =\n registerMetadataReq.value.data?.[REGISTER_METADATA_FILENAME] ??\n (registerMetadataReq.isUpdating ? undefined : null);\n const registerMetadata = !maybeRegisterMetadata || isRegisterMetadata(maybeRegisterMetadata)\n ? maybeRegisterMetadata\n : null;\n\n const remoteUsername: string | undefined = useRemoteUsername().value.username;\n\n const stakeholder: RegisterStakeholder | undefined = remoteUsername\n ? (registerMetadata?.stakeholders ?? []).\n find(s => s.gitServerUsername === remoteUsername)\n : undefined;\n\n\n // Active CR\n\n const [ activeChangeRequestID, setActiveChangeRequestID ] = useState<string | null>(null);\n\n const getRelatedClass = _getRelatedClass(itemClassConfiguration);\n\n return (\n <BrowserCtx.Provider\n value={{\n stakeholder,\n registerMetadata,\n offline: remoteUsername === undefined ? true : undefined,\n\n subregisters,\n itemClasses: itemClassConfiguration,\n\n jumpTo: spawnTab,\n\n selectedRegisterItem,\n\n activeChangeRequestID,\n setActiveChangeRequestID,\n\n useRegisterItemData,\n getRelatedItemClassConfiguration: getRelatedClass,\n customViews: customViews ?? [],\n\n keyExpression,\n defaultSearchCriteria,\n }}>\n <ChangeRequestContextProvider changeRequestID={activeChangeRequestID}>\n {children}\n </ChangeRequestContextProvider>\n </BrowserCtx.Provider>\n );\n}\n"]}
|
package/views/itemPathUtils.js
CHANGED
|
@@ -55,8 +55,10 @@ function incompleteItemRefToItemPathPrefix({
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
function itemPathToItemRefLike(hasSubregisters, itemPath) {
|
|
58
|
+
var _a;
|
|
59
|
+
|
|
58
60
|
const pathNormalized = itemPath.trim() ? stripLeadingSlash(itemPathNotInCR(itemPath)) : undefined;
|
|
59
|
-
const pathParts = (pathNormalized === null || pathNormalized === void 0 ? void 0 : pathNormalized.split('/'))
|
|
61
|
+
const pathParts = (_a = pathNormalized === null || pathNormalized === void 0 ? void 0 : pathNormalized.split('/')) !== null && _a !== void 0 ? _a : [];
|
|
60
62
|
const subregisterID = hasSubregisters && pathParts.length >= 1 ? pathParts[1] : undefined;
|
|
61
63
|
const classID = hasSubregisters ? pathParts.length >= 3 ? pathParts[2] : undefined : pathParts.length >= 1 ? pathParts[0] : undefined;
|
|
62
64
|
const itemID = hasSubregisters && pathParts.length === 4 || !hasSubregisters && pathParts.length === 2 ? pathParts[pathParts.length - 1].split('.')[0] : undefined;
|
|
@@ -99,9 +101,9 @@ const CR_ITEM_PREFIX_REGEX = /^proposals\/(?<crID>\p{Hex_Digit}{8}(?:-\p{Hex_Dig
|
|
|
99
101
|
*/
|
|
100
102
|
|
|
101
103
|
function getCRIDFromProposedItemPath(givenItemPath) {
|
|
102
|
-
var
|
|
104
|
+
var _a, _b, _c;
|
|
103
105
|
|
|
104
|
-
return ((
|
|
106
|
+
return (_c = (_b = (_a = stripLeadingSlash(givenItemPath).match(CR_ITEM_PREFIX_REGEX)) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b.crID) !== null && _c !== void 0 ? _c : null;
|
|
105
107
|
}
|
|
106
108
|
/**
|
|
107
109
|
* Given an item path, returns path relative to specified CR ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemPathUtils.js","sourceRoot":"","sources":["../../src/views/itemPathUtils.tsx"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAyB,EACzD,UAAmB;IAEnB,OAAO,GAAG,iCAAiC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,IAAI,MAAM,OAAO,CAAC;AACvG,CAAC;AAGD;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAC/C,EAAE,aAAa,EAAE,OAAO,EAAyC,EACjE,UAAmB;IAEnB,MAAM,aAAa,GAAG,GAAG,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,gBAAgB,aAAa,IAAI,aAAa,EAAE;QAClD,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS;QACxC,CAAC,CAAC,cAAc,UAAU,UAAU,QAAQ,EAAE;QAC9C,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;IACnB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,eAAwB,EAAE,QAAgB
|
|
1
|
+
{"version":3,"file":"itemPathUtils.js","sourceRoot":"","sources":["../../src/views/itemPathUtils.tsx"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAyB,EACzD,UAAmB;IAEnB,OAAO,GAAG,iCAAiC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,IAAI,MAAM,OAAO,CAAC;AACvG,CAAC;AAGD;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAC/C,EAAE,aAAa,EAAE,OAAO,EAAyC,EACjE,UAAmB;IAEnB,MAAM,aAAa,GAAG,GAAG,OAAO,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,gBAAgB,aAAa,IAAI,aAAa,EAAE;QAClD,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS;QACxC,CAAC,CAAC,cAAc,UAAU,UAAU,QAAQ,EAAE;QAC9C,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;IACnB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,eAAwB,EAAE,QAAgB;;IAE9E,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,EAAE;QACpC,CAAC,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,SAAS,GAAG,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC;IAEnD,MAAM,aAAa,GAAuB,eAAe,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;QAChF,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACd,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,OAAO,GAAuB,eAAe;QACjD,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC;YACrB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,SAAS;QACb,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC;YACrB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,MAAM,GACV,CAAC,eAAe,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,eAAe,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,iBAAiB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,iBAAiB,KAAK,SAAS;QACpD,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,eAAwB,EAAE,QAAgB;IAC1E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;QACvC,OAAO,QAAiC,CAAC;KAC1C;SAAM;QACL,OAAO,CAAC,KAAK,CAAC,yEAAyE,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChJ,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;KACvF;AACH,CAAC;AAGD,MAAM,oBAAoB,GAAG,2FAA2F,CAAC;AAGzH;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,aAAqB;;IAC/D,OAAO,MAAA,MAAA,MAAA,iBAAiB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,0CAAE,MAAM,0CAAE,IAAI,mCAAI,IAAI,CAAC;AAC5F,CAAC;AAGD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,IAAY;IAC9D,uCAAuC;IACvC,kEAAkE;IAClE,gFAAgF;IAChF,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACtF,OAAO,cAAc,IAAI,UAAU,UAAU,EAAE,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,aAAqB;IACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,UAAU,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAGD,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,cAAc,IAAI,YAAY,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,CACL,iBAAiB,CAAC,MAAM,CAAC;QACzB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACd,CAAC;AACJ,CAAC","sourcesContent":["import type { InternalItemReference } from '../types';\n\n\n/**\n * Returns dataset-relative path to a register item,\n * given structured item reference.\n *\n * Optionally makes path include given change request contents.\n */\nexport function itemRefToItemPath(\n { subregisterID, classID, itemID }: InternalItemReference,\n inCRWithID?: string,\n): string {\n return `${incompleteItemRefToItemPathPrefix({ subregisterID, classID }, inCRWithID)}/${itemID}.yaml`;\n}\n\n\n/**\n * Returns dataset-relative prefix to a register item,\n * given structured item reference without `itemID`.\n *\n * Optionally makes path include given change request contents.\n */\nexport function incompleteItemRefToItemPathPrefix(\n { subregisterID, classID }: Omit<InternalItemReference, 'itemID'>,\n inCRWithID?: string,\n): string {\n const itemWithClass = `${classID}`;\n const fullPath = subregisterID\n ? `subregisters/${subregisterID}/${itemWithClass}`\n : itemWithClass;\n const maybeInCR = inCRWithID !== undefined\n ? `/proposals/${inCRWithID}/items/${fullPath}`\n : `/${fullPath}`;\n return maybeInCR;\n}\n\n/**\n * Attempts to return a structured register item reference\n * given a dataset-relative item path.\n * If some components are missing, returns an incomplete reference.\n */\nexport function itemPathToItemRefLike(hasSubregisters: boolean, itemPath: string):\n{ itemID?: string; classID?: string; subregisterID?: string; } {\n const pathNormalized = itemPath.trim()\n ? stripLeadingSlash(itemPathNotInCR(itemPath))\n : undefined;\n const pathParts = pathNormalized?.split('/') ?? [];\n\n const subregisterID: string | undefined = hasSubregisters && pathParts.length >= 1\n ? pathParts[1]\n : undefined;\n\n const classID: string | undefined = hasSubregisters\n ? pathParts.length >= 3\n ? pathParts[2]\n : undefined\n : pathParts.length >= 1\n ? pathParts[0]\n : undefined;\n\n const itemID: string | undefined =\n (hasSubregisters && pathParts.length === 4) ||\n (!hasSubregisters && pathParts.length === 2)\n ? pathParts[pathParts.length - 1].split('.')[0]\n : undefined;\n\n return { subregisterID, classID, itemID };\n}\n\n/** Returns just register item ID, given dataset-relative path. */\nexport function itemPathToItemID(objPath: string): string | undefined {\n const objPathComponents = objPath?.split('/');\n const selectedItemID = objPathComponents !== undefined\n ? objPathComponents[objPathComponents.length - 1].split('.')[0]\n : undefined;\n return selectedItemID;\n}\n\n/**\n * Attempts to return a structured register item reference\n * given a dataset-relative item path.\n * If some components are missing, throws an Error.\n */\nexport function itemPathToItemRef(hasSubregisters: boolean, itemPath: string): InternalItemReference {\n const maybeRef = itemPathToItemRefLike(hasSubregisters, itemPath);\n if (maybeRef.classID && maybeRef.itemID) {\n return maybeRef as InternalItemReference;\n } else {\n console.error(\"Internal item reference cannot be constructed from given item path, got\", maybeRef, itemPath, hasSubregisters, \"from\", itemPath);\n throw new Error(\"Internal item reference cannot be constructed from given item path\");\n }\n}\n\n\nconst CR_ITEM_PREFIX_REGEX = /^proposals\\/(?<crID>\\p{Hex_Digit}{8}(?:-\\p{Hex_Digit}{4}){3}-\\p{Hex_Digit}{12})\\/items\\//u;\n\n\n/**\n * If given item path indicates that it is within any CR, returns respective CR ID.\n * Otherwise, returns `null`.\n */\nexport function getCRIDFromProposedItemPath(givenItemPath: string): string | null {\n return stripLeadingSlash(givenItemPath).match(CR_ITEM_PREFIX_REGEX)?.groups?.crID ?? null;\n}\n\n\n/**\n * Given an item path, returns path relative to specified CR ID\n * (even if the path is already relative to another CR ID).\n */\nexport function itemPathInCR(givenItemPath: string, crID: string): string {\n // Remove any CR prefix from given path\n // TODO(perf): Don’t do if prefix matches CR ID already specified?\n // TODO: Validate given path actually looks like a register item path and throw?\n const normalized = stripLeadingSlash(givenItemPath).replace(CR_ITEM_PREFIX_REGEX, '');\n return `/proposals/${crID}/items/${normalized}`;\n}\n\n/**\n * Returns given item path in register-relative form,\n * even if the path is given within proposal contents.\n */\nexport function itemPathNotInCR(givenItemPath: string): string {\n const normalized = stripLeadingSlash(givenItemPath).replace(CR_ITEM_PREFIX_REGEX, '');\n return `/${normalized}`;\n}\n\nfunction stripLeadingSlash(aPath: string): string {\n return aPath.replace(/^\\//, '');\n}\n\n\n/** Converts a change request ID to dataset-relative path to respective main.yaml. */\nexport function crIDToCRPath(crID: string): string {\n return `/proposals/${crID}/main.yaml`;\n}\n\n/** Extracts change request ID from dataset-relative path to its main.yaml. */\nexport function crPathToCRID(crPath: string): string {\n return (\n stripLeadingSlash(crPath).\n replace('proposals/', '').\n split('/')[0]\n );\n}\n"]}
|
|
@@ -52,6 +52,8 @@ const Browse = function ({
|
|
|
52
52
|
className,
|
|
53
53
|
style
|
|
54
54
|
}) {
|
|
55
|
+
var _a, _b, _c;
|
|
56
|
+
|
|
55
57
|
const {
|
|
56
58
|
performOperation,
|
|
57
59
|
updateObjects,
|
|
@@ -71,7 +73,7 @@ const Browse = function ({
|
|
|
71
73
|
changeRequest: activeCR,
|
|
72
74
|
canEdit: activeCRIsEditable
|
|
73
75
|
} = (0, _react.useContext)(_ChangeRequestContext.ChangeRequestContext);
|
|
74
|
-
const [state, dispatch] = usePersistentDatasetStateReducer(stateName
|
|
76
|
+
const [state, dispatch] = usePersistentDatasetStateReducer(stateName !== null && stateName !== void 0 ? stateName : 'browse-sidebar', undefined, function valdateState(loadedValue) {
|
|
75
77
|
function validateFolderID(foldID) {
|
|
76
78
|
return foldID !== undefined && (foldID === null || foldID.startsWith('by-item-class/') || foldID.startsWith('by-subregister/'));
|
|
77
79
|
}
|
|
@@ -142,6 +144,8 @@ const Browse = function ({
|
|
|
142
144
|
}, [focusedTabURI]);
|
|
143
145
|
|
|
144
146
|
async function handleAdd(classID, subregisterID) {
|
|
147
|
+
var _a;
|
|
148
|
+
|
|
145
149
|
if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {
|
|
146
150
|
throw new Error("Unable to create item: likely current proposal is not editable or dataset is read-only");
|
|
147
151
|
}
|
|
@@ -156,7 +160,7 @@ const Browse = function ({
|
|
|
156
160
|
throw new Error("Unable to generate new item data: item class configuration is missing");
|
|
157
161
|
}
|
|
158
162
|
|
|
159
|
-
const initialItemData = (clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.defaults)
|
|
163
|
+
const initialItemData = (_a = clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.defaults) !== null && _a !== void 0 ? _a : {};
|
|
160
164
|
const itemID = await makeRandomID();
|
|
161
165
|
const ref = {
|
|
162
166
|
classID,
|
|
@@ -193,12 +197,10 @@ const Browse = function ({
|
|
|
193
197
|
let folderInfo;
|
|
194
198
|
|
|
195
199
|
if (state.enteredFolderID.startsWith('by-item-class/')) {
|
|
196
|
-
var _clsConfig$meta;
|
|
197
|
-
|
|
198
200
|
const classID = state.enteredFolderID.split('/')[1];
|
|
199
201
|
const clsConfig = itemClasses[classID];
|
|
200
202
|
folderInfo = {
|
|
201
|
-
title: (clsConfig === null || clsConfig === void 0 ? void 0 :
|
|
203
|
+
title: (_b = (_a = clsConfig === null || clsConfig === void 0 ? void 0 : clsConfig.meta) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : classID,
|
|
202
204
|
moreMenu: clsConfig ? (0, _react2.jsx)(ItemClassMenu, {
|
|
203
205
|
cfg: itemClasses[classID],
|
|
204
206
|
onCreate: !subregisters && activeCRIsEditable && performOperation ? () => performOperation('generating new item', handleAdd)(classID) : undefined
|
|
@@ -220,7 +222,7 @@ const Browse = function ({
|
|
|
220
222
|
const subregisterID = state.enteredFolderID.split('/')[1];
|
|
221
223
|
const subregConfig = subregisters[subregisterID];
|
|
222
224
|
folderInfo = {
|
|
223
|
-
title: (subregConfig === null || subregConfig === void 0 ? void 0 : subregConfig.title)
|
|
225
|
+
title: (_c = subregConfig === null || subregConfig === void 0 ? void 0 : subregConfig.title) !== null && _c !== void 0 ? _c : subregisterID,
|
|
224
226
|
moreMenu: subregConfig ? (0, _react2.jsx)(SubregisterMenu, {
|
|
225
227
|
cfg: subregConfig,
|
|
226
228
|
itemClasses: itemClasses,
|
|
@@ -280,7 +282,7 @@ const Browse = function ({
|
|
|
280
282
|
}), (0, _react2.jsx)("div", {
|
|
281
283
|
css: (0, _react2.css)`flex: 1;`
|
|
282
284
|
}, (0, _react2.jsx)(SearchResultList, {
|
|
283
|
-
queryExpression: (0, _itemQueryUtils.getRegisterItemQuery)(queryExpression, activeCR
|
|
285
|
+
queryExpression: (0, _itemQueryUtils.getRegisterItemQuery)(queryExpression, activeCR !== null && activeCR !== void 0 ? activeCR : undefined),
|
|
284
286
|
keyExpression: keyExpression,
|
|
285
287
|
selectedItemPath: state.selectedItemPath,
|
|
286
288
|
onSelectItem: itemPath => dispatch({
|
|
@@ -289,7 +291,7 @@ const Browse = function ({
|
|
|
289
291
|
itemPath
|
|
290
292
|
}
|
|
291
293
|
}),
|
|
292
|
-
onOpenItem: onOpenItem
|
|
294
|
+
onOpenItem: onOpenItem !== null && onOpenItem !== void 0 ? onOpenItem : itemPath => spawnTab(`${_protocolRegistry.Protocols.ITEM_DETAILS}:${itemPath}`)
|
|
293
295
|
})));
|
|
294
296
|
} else {
|
|
295
297
|
// If we are *not* in a folder, show a list of available folders/views
|
|
@@ -353,9 +355,9 @@ const Browse = function ({
|
|
|
353
355
|
css: (0, _react2.css)`flex: 1;`,
|
|
354
356
|
className: className,
|
|
355
357
|
onNodeClick: node => {
|
|
356
|
-
var
|
|
358
|
+
var _a;
|
|
357
359
|
|
|
358
|
-
return (
|
|
360
|
+
return ((_a = node.nodeData) === null || _a === void 0 ? void 0 : _a.folderID) ? dispatch({
|
|
359
361
|
type: 'select-folder',
|
|
360
362
|
payload: {
|
|
361
363
|
id: node.nodeData.folderID
|
|
@@ -363,9 +365,9 @@ const Browse = function ({
|
|
|
363
365
|
}) : void 0;
|
|
364
366
|
},
|
|
365
367
|
onNodeExpand: node => {
|
|
366
|
-
var
|
|
368
|
+
var _a;
|
|
367
369
|
|
|
368
|
-
return (
|
|
370
|
+
return ((_a = node.nodeData) === null || _a === void 0 ? void 0 : _a.folderID) ? dispatch({
|
|
369
371
|
type: 'enter-folder',
|
|
370
372
|
payload: {
|
|
371
373
|
id: node.nodeData.folderID
|
|
@@ -373,9 +375,9 @@ const Browse = function ({
|
|
|
373
375
|
}) : void 0;
|
|
374
376
|
},
|
|
375
377
|
onNodeDoubleClick: node => {
|
|
376
|
-
var
|
|
378
|
+
var _a;
|
|
377
379
|
|
|
378
|
-
return (
|
|
380
|
+
return ((_a = node.nodeData) === null || _a === void 0 ? void 0 : _a.folderID) ? dispatch({
|
|
379
381
|
type: 'enter-folder',
|
|
380
382
|
payload: {
|
|
381
383
|
id: node.nodeData.folderID
|
|
@@ -408,10 +410,10 @@ const SubregisterMenu = function ({
|
|
|
408
410
|
return (0, _react2.jsx)(_core.Menu, null, (0, _react2.jsx)(_core.MenuDivider, {
|
|
409
411
|
title: `Item classes in ${cfg.title}`
|
|
410
412
|
}), cfg.itemClasses.map(classID => {
|
|
411
|
-
var
|
|
413
|
+
var _a, _b, _c;
|
|
412
414
|
|
|
413
415
|
return (0, _react2.jsx)(_core.MenuItem, {
|
|
414
|
-
text: ((
|
|
416
|
+
text: (_c = (_b = (_a = itemClasses[classID]) === null || _a === void 0 ? void 0 : _a.meta) === null || _b === void 0 ? void 0 : _b.title) !== null && _c !== void 0 ? _c : classID,
|
|
415
417
|
key: classID
|
|
416
418
|
}, (0, _react2.jsx)(ItemClassMenu, {
|
|
417
419
|
cfg: itemClasses[classID],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Browse/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAY,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAgB,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kEAAkE,CAAC;AAC1G,OAAO,oBAAoB,MAAM,2DAA2D,CAAC;AAG7F,OAAO,8BAA8B,MAAM,qDAAqD,CAAC;AACjG,OAAO,sBAAsB,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAwBnD,MAAM,MAAM,GAOZ,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE;IACnD,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvH,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACvE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5E,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAElG,MAAM,CAAE,KAAK,EAAE,QAAQ,EAAG,GAAI,gCAA8E,CAC1G,SAAS,IAAI,gBAAgB,EAC7B,SAAS,EACT,SAAS,YAAY,CAAC,WAAW;QAC/B,SAAS,gBAAgB,CAAC,MAAc;YACtC,OAAO,MAAM,KAAK,SAAS;gBAC3B,CACE,MAAM,KAAK,IAAI,IAAI,CACjB,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC;oBACnC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CACrC,CACF,CAAA;QAEH,CAAC;QACD,OAAO,CACL,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC;YAC7C,gBAAgB,CAAC,WAAW,CAAC,gBAAgB,CAAC;YAC9C,WAAW,CAAC,gBAAgB,KAAK,SAAS,CAC3C,CAAC;IACJ,CAAC,EACD,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;QACpB,QAAQ,MAAM,CAAC,IAAI,EAAE;YACnB,KAAK,eAAe;gBAClB,IAAI,SAAS,CAAC,eAAe,KAAK,IAAI,EAAE;oBACtC,OAAO,SAAS,CAAC;iBAClB;qBAAM;oBACL,OAAO;wBACL,GAAG,SAAS;wBACZ,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;qBACpC,CAAC;iBACH;YACH,KAAK,cAAc;gBACjB,IAAI,SAAS,CAAC,eAAe,KAAK,IAAI,EAAE;oBACtC,OAAO;wBACL,GAAG,SAAS;wBACZ,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;wBACnC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;qBACnC,CAAC;iBACH;qBAAM;oBACL,OAAO,SAAS,CAAC;iBAClB;YACH,KAAK,aAAa;gBAChB,IAAI,SAAS,CAAC,eAAe,KAAK,IAAI,EAAE;oBACtC,OAAO;wBACL,GAAG,SAAS;wBACZ,eAAe,EAAE,IAAI;wBACrB,gBAAgB,EAAE,IAAI;qBACvB,CAAC;iBACH;qBAAM;oBACL,OAAO,SAAS,CAAC;iBAClB;YACH,KAAK,aAAa;gBAChB,IAAI,SAAS,CAAC,eAAe,IAAI,SAAS,CAAC,gBAAgB,EAAE;oBAC3D,OAAO;wBACL,GAAG,SAAS;wBACZ,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;qBAC1C,CAAC;iBACH;qBAAM;oBACL,OAAO,SAAS,CAAC;iBAClB;YACH;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC9C;IACH,CAAC,EACD;QACE,gBAAgB,EAAE,IAAI;QACtB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;KACvB,EACD,IAAI,CAAC,CAAC;IAER,sEAAsE;IACtE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,EAAE;YACjB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnD,mCAAmC;YACnC,IAAI,KAAK,KAAK,SAAS,CAAC,YAAY,EAAE;gBACpC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;aAC1D;SACF;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,aAAsB;QAC9D,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,IAAI,CAAC,kBAAkB,IAAI,CAAC,QAAQ,EAAE;YACvE,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;SAC3G;QACD,IAAI,YAAY,IAAI,CAAC,aAAa,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;SAC3G;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;SAC1F;QACD,MAAM,eAAe,GAAG,SAAS,EAAE,QAAQ,IAAI,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,GAAG,GAA0B,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QACtE,MAAM,YAAY,GAAsB;YACtC,EAAE,EAAE,MAAM;YACV,YAAY,EAAE,IAAI,IAAI,EAAE;YACxB,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAe;SACtB,CAAC;QACF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,aAAa,CAAC;YAClB,aAAa,EAAE,sBAAsB,GAAG,CAAC,OAAO,EAAE;YAClD,eAAe,EAAE,uBAAuB,CACtC,QAAe,EACf,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EACpC,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAC7B;YACD,0BAA0B,EAAE,IAAI;SACjC,CAAC,CAAC;QACH,QAAQ,CAAC,GAAG,SAAS,CAAC,YAAY,IAAI,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE;QAClC,2DAA2D;QAC3D,sCAAsC;QACtC,0CAA0C;QAC1C,+DAA+D;QAE/D,IAAI,QAAuB,CAAC;QAC5B,IAAI,UAAqD,CAAC;QAE1D,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;YACtD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACvC,UAAU,GAAG;gBACX,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,IAAI,OAAO;gBACxC,QAAQ,EAAE,SAAS;oBACjB,CAAC,CAAC,IAAC,aAAa,IACZ,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,EACzB,QAAQ,EAAE,CAAC,YAAY,IAAI,kBAAkB,IAAI,gBAAgB;4BAC/D,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC;4BACnE,CAAC,CAAC,SAAS,GACb;oBACJ,CAAC,CAAC,SAAS;aACd,CAAC;YACF,QAAQ,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,YAAY;wBACjB,KAAK,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC,OAAO,CACjD,EAAE,OAAO,EAAE,EACX,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;qBACjC;iBACF;aACF,CAAC;SACH;aAAM,IAAI,YAAY,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;YAC9E,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;YACjD,UAAU,GAAG;gBACX,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,aAAa;gBAC3C,QAAQ,EAAE,YAAY;oBACpB,CAAC,CAAC,IAAC,eAAe,IACd,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,kBAAkB,IAAI,gBAAgB;4BAC9C,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC;4BACrF,CAAC,CAAC,SAAS,GACb;oBACJ,CAAC,CAAC,SAAS;aACd,CAAC;YACF,QAAQ,GAAG;gBACT,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,aAAa;wBAClB,KAAK,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC,OAAO,CAClD,EAAE,aAAa,EAAE,EACjB,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;qBACjC;iBACF;aACF,CAAC;SACH;aAAM;YACL,UAAU,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC3B,QAAQ,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;SAC7C;QAGD,MAAM,eAAe,GAAG,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QAEjE,OAAO,CACL,aAAK,GAAG,EAAE,GAAG,CAAA,0CAA0C,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK;YAEzF,IAAC,IAAI,IACH,GAAG,EAAE,GAAG,CAAA,UAAU,EAClB,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAC,CAAC,EAChF,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EACvD,iBAAiB,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAC1D,QAAQ,EAAE,CAAC;wBACT,EAAE,EAAE,cAAc;wBAClB,UAAU,EAAE,KAAK,CAAC,gBAAgB,KAAK,IAAI;wBAC3C,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,UAAU,CAAC,KAAK;wBACvB,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAC,QAAQ,QAAE,UAAU,CAAC,QAAQ,CAAY,CAAC,CAAC,CAAC,SAAS;qBAC7F,CAAC,GACF;YACF,aAAK,GAAG,EAAE,GAAG,CAAA,UAAU;gBACrB,IAAC,gBAAgB,IACf,eAAe,EAAE,oBAAoB,CAAC,eAAe,EAAE,QAAQ,IAAI,SAAS,CAAC,EAC7E,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAC,CAAC,EACjF,UAAU,EAAE,UAAU,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,YAAY,IAAI,QAAQ,EAAE,CAAC,CAAC,GACzF,CACE,CACF,CACP,CAAC;KACH;SAAM;QACL,sEAAsE;QACtE,+BAA+B;QAE/B,MAAM,QAAQ,GAAgD,CAAC;gBAC7D,EAAE,EAAE,eAAe;gBACnB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;aAC7B,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjE,UAAU,EAAE,KAAK,CAAC,gBAAgB,KAAK,iBAAiB,OAAO,EAAE;gBACjE,EAAE,EAAE,OAAO;gBACX,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE,cAA0B;gBAChC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK;gBAC7B,QAAQ,EAAE,EAAE,QAAQ,EAAE,iBAAiB,OAAO,EAAE,EAAE;gBAClD,cAAc,EACZ,IAAC,QAAQ;oBACP,IAAC,aAAa,IACZ,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,CAAC,YAAY,IAAI,kBAAkB,IAAI,gBAAgB;4BAC/D,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC;4BACnE,CAAC,CAAC,SAAS,GACb,CACO;aACd,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY;gBACnB,CAAC,CAAC,CAAC;wBACC,EAAE,EAAE,gBAAgB;wBACpB,UAAU,EAAE,IAAI;wBAChB,QAAQ,EAAE,KAAK;wBACf,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,QAAoB;wBAC1B,KAAK,EAAE,gBAAgB;wBACvB,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;qBAC7B,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC9E,UAAU,EAAE,KAAK,CAAC,gBAAgB,KAAK,kBAAkB,aAAa,EAAE;wBACxE,EAAE,EAAE,aAAa;wBACjB,UAAU,EAAE,KAAK;wBACjB,IAAI,EAAE,cAA0B;wBAChC,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,iBAAiB,CAAC,KAAK;wBAC9B,QAAQ,EAAE,EAAE,QAAQ,EAAE,kBAAkB,aAAa,EAAE,EAAE;wBACzD,cAAc,EACZ,IAAC,QAAQ;4BACP,IAAC,eAAe,IACd,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,kBAAkB,IAAI,gBAAgB;oCAC9C,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC;oCACrF,CAAC,CAAC,SAAS,GACb,CACO;qBACd,CAAC,CAAC,CAAC;gBACN,CAAC,CAAC,EAAE,CAAC;SACN,CAAC;QACF,IAAI,YAAY,EAAE;YAChB,QAAQ,CAAC,IAAI,EAAE,CAAA;SAChB;QACD,OAAO,CACL,IAAC,IAAI,IACH,GAAG,EAAE,GAAG,CAAA,UAAU,EAClB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ;gBAC1C,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAC,CAAC;gBAC7E,CAAC,CAAC,KAAK,CAAC,EACV,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ;gBAC3C,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAC,CAAC;gBAC5E,CAAC,CAAC,KAAK,CAAC,EACV,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ;gBAChD,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAC,CAAC;gBAC5E,CAAC,CAAC,KAAK,CAAC,EACV,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAC;KACH;AACH,CAAC,CAAC;AAGF,MAAM,QAAQ,GAAmC,UAAU,EAAE,QAAQ,EAAE;IACrE,OAAO,CACL,IAAC,QAAQ,IAAC,OAAO,QAAC,OAAO,EAAE,0BAAG,QAAQ,CAAI;QACxC,IAAC,MAAM,IAAC,IAAI,EAAC,MAAM,EAAC,KAAK,QAAC,OAAO,SAAG,CAC3B,CACZ,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,eAAe,GAIhB,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE;IAC3C,OAAO,CACL,IAAC,IAAI;QACH,IAAC,WAAW,IAAC,KAAK,EAAE,mBAAmB,GAAG,CAAC,KAAK,EAAE,GAAI;QACnD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAC7B,IAAC,QAAQ,IACL,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,OAAO,EAClD,GAAG,EAAE,OAAO;YACd,IAAC,aAAa,IACZ,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,EACzB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,GACxD,CACO,CACZ,CACE,CACR,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,aAAa,GAGd,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE;IAC9B,OAAO,CACL,IAAC,IAAI;QACH,IAAC,WAAW,IAAC,KAAK,EAAC,kBAAkB,GAAG;QACxC,IAAC,QAAQ,IAAC,SAAS,QAAC,QAAQ,QAAC,GAAG,EAAE,GAAG,CAAA,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,GAAI;QACtF,QAAQ;YACP,CAAC,CAAC;gBACE,IAAC,WAAW,IAAC,KAAK,EAAC,eAAe,GAAG;gBACrC,IAAC,QAAQ,IACP,IAAI,EAAC,aAAa,EAClB,MAAM,EAAC,SAAS,EAChB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAC,MAAM,GAC9B,CACD;YACL,CAAC,CAAC,IAAI,CACH,CACR,CAAC;AACJ,CAAC,CAAA;AAGD,MAAM,gBAAgB,GAAG,oBAAoB,CAAoB,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvF,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE;QACT,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,oBAAoB,OAAO,EAAE;KACzC;CACF,CAAC,CAAC,CAAC;AAGJ,eAAe,MAAM,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, IconName, Menu, MenuItem, MenuDivider, Tree, TreeNodeInfo } from '@blueprintjs/core';\nimport { Popover2 } from '@blueprintjs/popover2';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\n\nimport type { CriteriaGroup } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport CRITERIA_CONFIGURATION from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { updateCRObjectChangeset } from '../../change-request/objectChangeset';\nimport type { RegisterItem, InternalItemReference } from '../../../types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\ninterface BaseState {\n selectedFolderID: string | null\n selectedItemPath: string | null\n enteredFolderID: string | null\n}\ninterface FolderListState extends BaseState {\n enteredFolderID: null\n selectedItemPath: null\n}\ninterface ItemListState extends BaseState {\n enteredFolderID: string\n selectedFolderID: string\n}\ntype State = FolderListState | ItemListState\n\ntype Action =\n | { type: 'select-folder'; payload: { id: string | null; }; }\n | { type: 'enter-folder'; payload: { id: string; }; }\n | { type: 'exit-folder'; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst Browse: React.FC<{\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n stateName?: string\n className?: string\n style?: React.CSSProperties\n}> =\nfunction ({ stateName, onOpenItem, className, style }) {\n const { performOperation, updateObjects, makeRandomID, usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { keyExpression, itemClasses, subregisters } = useContext(BrowserCtx);\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'browse-sidebar',\n undefined,\n function valdateState(loadedValue): loadedValue is State {\n function validateFolderID(foldID: string) {\n return foldID !== undefined &&\n (\n foldID === null || (\n foldID.startsWith('by-item-class/') ||\n foldID.startsWith('by-subregister/')\n )\n )\n\n }\n return (\n validateFolderID(loadedValue.enteredFolderID) &&\n validateFolderID(loadedValue.selectedFolderID) &&\n loadedValue.selectedItemPath !== undefined\n );\n },\n (prevState, action) => {\n switch (action.type) {\n case 'select-folder':\n if (prevState.enteredFolderID !== null) {\n return prevState;\n } else {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n };\n }\n case 'enter-folder':\n if (prevState.enteredFolderID === null) {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n enteredFolderID: action.payload.id,\n };\n } else {\n return prevState;\n }\n case 'exit-folder':\n if (prevState.enteredFolderID !== null) {\n return {\n ...prevState,\n enteredFolderID: null,\n selectedItemPath: null,\n };\n } else {\n return prevState;\n }\n case 'select-item':\n if (prevState.enteredFolderID && prevState.selectedFolderID) {\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n } else {\n return prevState;\n }\n default:\n throw new Error(\"Unexpected browse state\");\n }\n },\n {\n selectedFolderID: null,\n enteredFolderID: null,\n selectedItemPath: null,\n },\n null);\n\n // If currently focused tab changed, select corresponding item in view\n useEffect(() => {\n if (focusedTabURI) {\n const [proto, itemPath] = focusedTabURI.split(':');\n // TODO: also check entered folder?\n if (proto === Protocols.ITEM_DETAILS) {\n dispatch({ type: 'select-item', payload: { itemPath } });\n }\n }\n }, [focusedTabURI]);\n\n async function handleAdd(classID: string, subregisterID?: string) {\n if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {\n throw new Error(\"Unable to create item: likely current proposal is not editable or dataset is read-only\");\n }\n if (subregisters && !subregisterID) {\n throw new Error(\"Unable to create item: register uses subregisters, but subregister ID was not provided\");\n }\n const clsConfig = itemClasses[classID];\n if (!clsConfig) {\n throw new Error(\"Unable to generate new item data: item class configuration is missing\");\n }\n const initialItemData = clsConfig?.defaults ?? {};\n const itemID = await makeRandomID();\n const ref: InternalItemReference = { classID, itemID, subregisterID };\n const registerItem: RegisterItem<any> = {\n id: itemID,\n dateAccepted: new Date(),\n status: 'valid',\n data: initialItemData,\n };\n const itemPath = itemRefToItemPath(ref);\n await updateObjects({\n commitMessage: `propose to add new ${ref.classID}`,\n objectChangeset: updateCRObjectChangeset(\n activeCR as any,\n { [itemPath]: { type: 'addition' } },\n { [itemPath]: registerItem },\n ),\n _dangerouslySkipValidation: true,\n });\n spawnTab(`${Protocols.ITEM_DETAILS}:${itemRefToItemPath(ref, activeCR.id)}`);\n }\n\n if (state.enteredFolderID !== null) {\n // If we are in a folder, show a tree with a single element\n // indicating currently entered folder\n // followed by windowed search result list\n // with query according to the folder (item class, subregister)\n\n let criteria: CriteriaGroup;\n let folderInfo: { title: string; moreMenu?: JSX.Element };\n\n if (state.enteredFolderID.startsWith('by-item-class/')) {\n const classID = state.enteredFolderID.split('/')[1];\n const clsConfig = itemClasses[classID];\n folderInfo = {\n title: clsConfig?.meta?.title ?? classID,\n moreMenu: clsConfig\n ? <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={!subregisters && activeCRIsEditable && performOperation\n ? () => performOperation('generating new item', handleAdd)(classID)\n : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'item-class',\n query: CRITERIA_CONFIGURATION['item-class'].toQuery(\n { classID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else if (subregisters && state.enteredFolderID.startsWith('by-subregister/')) {\n const subregisterID = state.enteredFolderID.split('/')[1];\n const subregConfig = subregisters[subregisterID];\n folderInfo = {\n title: subregConfig?.title ?? subregisterID,\n moreMenu: subregConfig\n ? <SubregisterMenu\n cfg={subregConfig}\n itemClasses={itemClasses}\n onCreate={activeCRIsEditable && performOperation\n ? (clsID) => performOperation('generating new item', handleAdd)(clsID, subregisterID)\n : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'subregister',\n query: CRITERIA_CONFIGURATION['subregister'].toQuery(\n { subregisterID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else {\n folderInfo = { title: '' };\n criteria = { require: 'all', criteria: [] };\n }\n\n\n const queryExpression = criteriaGroupToQueryExpression(criteria);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n {/* */}\n <Tree\n css={css`flex: 0;`}\n onNodeClick={() => dispatch({ type: 'select-item', payload: { itemPath: null }})}\n onNodeCollapse={() => dispatch({ type: 'exit-folder' })}\n onNodeDoubleClick={() => dispatch({ type: 'exit-folder' })}\n contents={[{\n id: 'opened-class',\n isSelected: state.selectedItemPath === null,\n isExpanded: true,\n hasCaret: true,\n icon: 'folder-open',\n label: folderInfo.title,\n secondaryLabel: folderInfo.moreMenu ? <MoreMenu>{folderInfo.moreMenu}</MoreMenu> : undefined,\n }]}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={getRegisterItemQuery(queryExpression, activeCR ?? undefined)}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={itemPath => dispatch({ type: 'select-item', payload: { itemPath }})}\n onOpenItem={onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`))}\n />\n </div>\n </div>\n );\n } else {\n // If we are *not* in a folder, show a list of available folders/views\n // (item classes, subregisters)\n\n const contents: TreeNodeInfo<{ folderID: string | null }>[] = [{\n id: 'by-item-class',\n isExpanded: true,\n hasCaret: false,\n icon: 'filter',\n label: \"By item class\",\n disabled: true,\n nodeData: { folderID: null },\n }, ...Object.entries(itemClasses).map(([classID, classConfig]) => ({\n isSelected: state.selectedFolderID === `by-item-class/${classID}`,\n id: classID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: classConfig.meta.title,\n nodeData: { folderID: `by-item-class/${classID}` },\n secondaryLabel:\n <MoreMenu>\n <ItemClassMenu\n cfg={classConfig}\n onCreate={!subregisters && activeCRIsEditable && performOperation\n ? () => performOperation('generating new item', handleAdd)(classID)\n : undefined}\n />\n </MoreMenu>,\n })), ...(subregisters\n ? [{\n id: 'by-subregister',\n isExpanded: true,\n hasCaret: false,\n disabled: true,\n icon: 'filter' as IconName,\n label: \"By subregister\",\n nodeData: { folderID: null },\n }, ...Object.entries(subregisters).map(([subregisterID, subregisterConfig]) => ({\n isSelected: state.selectedFolderID === `by-subregister/${subregisterID}`,\n id: subregisterID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: subregisterConfig.title,\n nodeData: { folderID: `by-subregister/${subregisterID}` },\n secondaryLabel:\n <MoreMenu>\n <SubregisterMenu\n cfg={subregisterConfig}\n itemClasses={itemClasses}\n onCreate={activeCRIsEditable && performOperation\n ? (clsID) => performOperation('generating new item', handleAdd)(clsID, subregisterID)\n : undefined}\n />\n </MoreMenu>,\n }))]\n : [])\n ];\n if (subregisters) {\n contents.push()\n }\n return (\n <Tree\n css={css`flex: 1;`}\n className={className}\n onNodeClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'select-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeExpand={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeDoubleClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n contents={contents}\n />\n );\n }\n};\n\n\nconst MoreMenu: React.FC<Record<never, never>> = function ({ children }) {\n return (\n <Popover2 minimal content={<>{children}</>}>\n <Button icon=\"more\" small minimal />\n </Popover2>\n );\n}\n\n\nconst SubregisterMenu: React.FC<{\n cfg: { title: string, itemClasses: string[] };\n itemClasses: BrowserCtx[\"itemClasses\"];\n onCreate?: (classID: string) => void;\n}> = function ({ cfg, itemClasses, onCreate }) {\n return (\n <Menu>\n <MenuDivider title={`Item classes in ${cfg.title}`} />\n {cfg.itemClasses.map(classID =>\n <MenuItem\n text={itemClasses[classID]?.meta?.title ?? classID}\n key={classID}>\n <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={onCreate ? () => onCreate(classID) : undefined}\n />\n </MenuItem>\n )}\n </Menu>\n );\n}\n\n\nconst ItemClassMenu: React.FC<{\n cfg: BrowserCtx[\"itemClasses\"][string];\n onCreate?: () => void;\n}> = function ({ cfg, onCreate }) {\n return (\n <Menu>\n <MenuDivider title=\"About this class\" />\n <MenuItem multiline disabled css={css`max-width: 400px`} text={cfg.meta.description} />\n {onCreate\n ? <>\n <MenuDivider title=\"Quick actions\" />\n <MenuItem\n text=\"Propose new\"\n intent=\"primary\"\n onClick={onCreate} icon=\"plus\"\n />\n </>\n : null}\n </Menu>\n );\n}\n\n\nconst SearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`\n }\n}));\n\n\nexport default Browse;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Browse/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, IconName, Menu, MenuItem, MenuDivider, Tree, TreeNodeInfo } from '@blueprintjs/core';\nimport { Popover2 } from '@blueprintjs/popover2';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\n\nimport type { CriteriaGroup } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport CRITERIA_CONFIGURATION from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport { updateCRObjectChangeset } from '../../change-request/objectChangeset';\nimport type { RegisterItem, InternalItemReference } from '../../../types';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\ninterface BaseState {\n selectedFolderID: string | null\n selectedItemPath: string | null\n enteredFolderID: string | null\n}\ninterface FolderListState extends BaseState {\n enteredFolderID: null\n selectedItemPath: null\n}\ninterface ItemListState extends BaseState {\n enteredFolderID: string\n selectedFolderID: string\n}\ntype State = FolderListState | ItemListState\n\ntype Action =\n | { type: 'select-folder'; payload: { id: string | null; }; }\n | { type: 'enter-folder'; payload: { id: string; }; }\n | { type: 'exit-folder'; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst Browse: React.FC<{\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n stateName?: string\n className?: string\n style?: React.CSSProperties\n}> =\nfunction ({ stateName, onOpenItem, className, style }) {\n const { performOperation, updateObjects, makeRandomID, usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { keyExpression, itemClasses, subregisters } = useContext(BrowserCtx);\n const { changeRequest: activeCR, canEdit: activeCRIsEditable } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'browse-sidebar',\n undefined,\n function valdateState(loadedValue): loadedValue is State {\n function validateFolderID(foldID: string) {\n return foldID !== undefined &&\n (\n foldID === null || (\n foldID.startsWith('by-item-class/') ||\n foldID.startsWith('by-subregister/')\n )\n )\n\n }\n return (\n validateFolderID(loadedValue.enteredFolderID) &&\n validateFolderID(loadedValue.selectedFolderID) &&\n loadedValue.selectedItemPath !== undefined\n );\n },\n (prevState, action) => {\n switch (action.type) {\n case 'select-folder':\n if (prevState.enteredFolderID !== null) {\n return prevState;\n } else {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n };\n }\n case 'enter-folder':\n if (prevState.enteredFolderID === null) {\n return {\n ...prevState,\n selectedFolderID: action.payload.id,\n enteredFolderID: action.payload.id,\n };\n } else {\n return prevState;\n }\n case 'exit-folder':\n if (prevState.enteredFolderID !== null) {\n return {\n ...prevState,\n enteredFolderID: null,\n selectedItemPath: null,\n };\n } else {\n return prevState;\n }\n case 'select-item':\n if (prevState.enteredFolderID && prevState.selectedFolderID) {\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n } else {\n return prevState;\n }\n default:\n throw new Error(\"Unexpected browse state\");\n }\n },\n {\n selectedFolderID: null,\n enteredFolderID: null,\n selectedItemPath: null,\n },\n null);\n\n // If currently focused tab changed, select corresponding item in view\n useEffect(() => {\n if (focusedTabURI) {\n const [proto, itemPath] = focusedTabURI.split(':');\n // TODO: also check entered folder?\n if (proto === Protocols.ITEM_DETAILS) {\n dispatch({ type: 'select-item', payload: { itemPath } });\n }\n }\n }, [focusedTabURI]);\n\n async function handleAdd(classID: string, subregisterID?: string) {\n if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {\n throw new Error(\"Unable to create item: likely current proposal is not editable or dataset is read-only\");\n }\n if (subregisters && !subregisterID) {\n throw new Error(\"Unable to create item: register uses subregisters, but subregister ID was not provided\");\n }\n const clsConfig = itemClasses[classID];\n if (!clsConfig) {\n throw new Error(\"Unable to generate new item data: item class configuration is missing\");\n }\n const initialItemData = clsConfig?.defaults ?? {};\n const itemID = await makeRandomID();\n const ref: InternalItemReference = { classID, itemID, subregisterID };\n const registerItem: RegisterItem<any> = {\n id: itemID,\n dateAccepted: new Date(),\n status: 'valid',\n data: initialItemData,\n };\n const itemPath = itemRefToItemPath(ref);\n await updateObjects({\n commitMessage: `propose to add new ${ref.classID}`,\n objectChangeset: updateCRObjectChangeset(\n activeCR as any,\n { [itemPath]: { type: 'addition' } },\n { [itemPath]: registerItem },\n ),\n _dangerouslySkipValidation: true,\n });\n spawnTab(`${Protocols.ITEM_DETAILS}:${itemRefToItemPath(ref, activeCR.id)}`);\n }\n\n if (state.enteredFolderID !== null) {\n // If we are in a folder, show a tree with a single element\n // indicating currently entered folder\n // followed by windowed search result list\n // with query according to the folder (item class, subregister)\n\n let criteria: CriteriaGroup;\n let folderInfo: { title: string; moreMenu?: JSX.Element };\n\n if (state.enteredFolderID.startsWith('by-item-class/')) {\n const classID = state.enteredFolderID.split('/')[1];\n const clsConfig = itemClasses[classID];\n folderInfo = {\n title: clsConfig?.meta?.title ?? classID,\n moreMenu: clsConfig\n ? <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={!subregisters && activeCRIsEditable && performOperation\n ? () => performOperation('generating new item', handleAdd)(classID)\n : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'item-class',\n query: CRITERIA_CONFIGURATION['item-class'].toQuery(\n { classID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else if (subregisters && state.enteredFolderID.startsWith('by-subregister/')) {\n const subregisterID = state.enteredFolderID.split('/')[1];\n const subregConfig = subregisters[subregisterID];\n folderInfo = {\n title: subregConfig?.title ?? subregisterID,\n moreMenu: subregConfig\n ? <SubregisterMenu\n cfg={subregConfig}\n itemClasses={itemClasses}\n onCreate={activeCRIsEditable && performOperation\n ? (clsID) => performOperation('generating new item', handleAdd)(clsID, subregisterID)\n : undefined}\n />\n : undefined,\n };\n criteria = {\n require: 'all',\n criteria: [\n {\n key: 'subregister',\n query: CRITERIA_CONFIGURATION['subregister'].toQuery(\n { subregisterID },\n { itemClasses, subregisters }),\n },\n ],\n };\n } else {\n folderInfo = { title: '' };\n criteria = { require: 'all', criteria: [] };\n }\n\n\n const queryExpression = criteriaGroupToQueryExpression(criteria);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n {/* */}\n <Tree\n css={css`flex: 0;`}\n onNodeClick={() => dispatch({ type: 'select-item', payload: { itemPath: null }})}\n onNodeCollapse={() => dispatch({ type: 'exit-folder' })}\n onNodeDoubleClick={() => dispatch({ type: 'exit-folder' })}\n contents={[{\n id: 'opened-class',\n isSelected: state.selectedItemPath === null,\n isExpanded: true,\n hasCaret: true,\n icon: 'folder-open',\n label: folderInfo.title,\n secondaryLabel: folderInfo.moreMenu ? <MoreMenu>{folderInfo.moreMenu}</MoreMenu> : undefined,\n }]}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={getRegisterItemQuery(queryExpression, activeCR ?? undefined)}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={itemPath => dispatch({ type: 'select-item', payload: { itemPath }})}\n onOpenItem={onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`))}\n />\n </div>\n </div>\n );\n } else {\n // If we are *not* in a folder, show a list of available folders/views\n // (item classes, subregisters)\n\n const contents: TreeNodeInfo<{ folderID: string | null }>[] = [{\n id: 'by-item-class',\n isExpanded: true,\n hasCaret: false,\n icon: 'filter',\n label: \"By item class\",\n disabled: true,\n nodeData: { folderID: null },\n }, ...Object.entries(itemClasses).map(([classID, classConfig]) => ({\n isSelected: state.selectedFolderID === `by-item-class/${classID}`,\n id: classID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: classConfig.meta.title,\n nodeData: { folderID: `by-item-class/${classID}` },\n secondaryLabel:\n <MoreMenu>\n <ItemClassMenu\n cfg={classConfig}\n onCreate={!subregisters && activeCRIsEditable && performOperation\n ? () => performOperation('generating new item', handleAdd)(classID)\n : undefined}\n />\n </MoreMenu>,\n })), ...(subregisters\n ? [{\n id: 'by-subregister',\n isExpanded: true,\n hasCaret: false,\n disabled: true,\n icon: 'filter' as IconName,\n label: \"By subregister\",\n nodeData: { folderID: null },\n }, ...Object.entries(subregisters).map(([subregisterID, subregisterConfig]) => ({\n isSelected: state.selectedFolderID === `by-subregister/${subregisterID}`,\n id: subregisterID,\n isExpanded: false,\n icon: 'folder-close' as IconName,\n hasCaret: true,\n label: subregisterConfig.title,\n nodeData: { folderID: `by-subregister/${subregisterID}` },\n secondaryLabel:\n <MoreMenu>\n <SubregisterMenu\n cfg={subregisterConfig}\n itemClasses={itemClasses}\n onCreate={activeCRIsEditable && performOperation\n ? (clsID) => performOperation('generating new item', handleAdd)(clsID, subregisterID)\n : undefined}\n />\n </MoreMenu>,\n }))]\n : [])\n ];\n if (subregisters) {\n contents.push()\n }\n return (\n <Tree\n css={css`flex: 1;`}\n className={className}\n onNodeClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'select-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeExpand={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n onNodeDoubleClick={node => node.nodeData?.folderID\n ? dispatch({ type: 'enter-folder', payload: { id: node.nodeData.folderID }})\n : void 0}\n contents={contents}\n />\n );\n }\n};\n\n\nconst MoreMenu: React.FC<Record<never, never>> = function ({ children }) {\n return (\n <Popover2 minimal content={<>{children}</>}>\n <Button icon=\"more\" small minimal />\n </Popover2>\n );\n}\n\n\nconst SubregisterMenu: React.FC<{\n cfg: { title: string, itemClasses: string[] };\n itemClasses: BrowserCtx[\"itemClasses\"];\n onCreate?: (classID: string) => void;\n}> = function ({ cfg, itemClasses, onCreate }) {\n return (\n <Menu>\n <MenuDivider title={`Item classes in ${cfg.title}`} />\n {cfg.itemClasses.map(classID =>\n <MenuItem\n text={itemClasses[classID]?.meta?.title ?? classID}\n key={classID}>\n <ItemClassMenu\n cfg={itemClasses[classID]}\n onCreate={onCreate ? () => onCreate(classID) : undefined}\n />\n </MenuItem>\n )}\n </Menu>\n );\n}\n\n\nconst ItemClassMenu: React.FC<{\n cfg: BrowserCtx[\"itemClasses\"][string];\n onCreate?: () => void;\n}> = function ({ cfg, onCreate }) {\n return (\n <Menu>\n <MenuDivider title=\"About this class\" />\n <MenuItem multiline disabled css={css`max-width: 400px`} text={cfg.meta.description} />\n {onCreate\n ? <>\n <MenuDivider title=\"Quick actions\" />\n <MenuItem\n text=\"Propose new\"\n intent=\"primary\"\n onClick={onCreate} icon=\"plus\"\n />\n </>\n : null}\n </Menu>\n );\n}\n\n\nconst SearchResultList = makeSearchResultList<RegisterItem<any>>(ListItem, (objPath) => ({\n name: 'reg. item',\n iconProps: {\n icon: 'document',\n title: objPath,\n htmlTitle: `Icon for item at ${objPath}`\n }\n}));\n\n\nexport default Browse;\n"]}
|
|
@@ -23,6 +23,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
23
23
|
|
|
24
24
|
/** @jsxFrag React.Fragment */
|
|
25
25
|
const ExportSidebarBlock = function () {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
|
|
26
28
|
const {
|
|
27
29
|
writeFileToFilesystem,
|
|
28
30
|
getObjectData,
|
|
@@ -71,12 +73,10 @@ const ExportSidebarBlock = function () {
|
|
|
71
73
|
if (!selectedRegisterItem) {
|
|
72
74
|
return (0, _react2.jsx)(_react.default.Fragment, null);
|
|
73
75
|
} else {
|
|
74
|
-
var _selectedRegisterItem;
|
|
75
|
-
|
|
76
76
|
return (0, _react2.jsx)(_core.ButtonGroup, {
|
|
77
77
|
vertical: true,
|
|
78
78
|
fill: true
|
|
79
|
-
}, ((selectedRegisterItem === null || selectedRegisterItem === void 0 ? void 0 :
|
|
79
|
+
}, ((_b = (_a = selectedRegisterItem === null || selectedRegisterItem === void 0 ? void 0 : selectedRegisterItem.itemClass) === null || _a === void 0 ? void 0 : _a.exportFormats) !== null && _b !== void 0 ? _b : []).map((exportFormat, idx) => (0, _react2.jsx)(_core.Button, {
|
|
80
80
|
fill: true,
|
|
81
81
|
key: idx,
|
|
82
82
|
alignText: "left",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Export/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,MAAM,kBAAkB,GAAmC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Export/index.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,MAAM,kBAAkB,GAAmC;;IAChE,MAAM,EAAE,qBAAqB,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACrF,MAAM,EAAE,oBAAoB,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAExD,KAAK,UAAU,YAAY,CAAC,UAAsB;QAChD,IAAI,CAAC,qBAAqB,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;SAC5E;QAED,MAAM,qBAAqB,CAAC;YAC1B,UAAU,EAAE;gBACV,MAAM,EAAE,8BAA8B;gBACtC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;aACpD;YACD,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,eAAe,CAAC,YAA6C;QAC1E,IAAI,CAAC,oBAAoB,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;SAC3E;QACD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QACD,IAAI,YAAY,EAAE;YAChB,OAAO,MAAM,YAAY,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;SAC7F;aAAM;YACL,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;SACjE;IACH,CAAC;IAED,IAAI,CAAC,oBAAoB,EAAE;QACzB,OAAO,yBAAK,CAAC;KACd;SAAM;QACL,OAAO,CACN,IAAC,WAAW,IAAC,QAAQ,QAAC,IAAI;YACvB,CAAC,MAAA,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,SAAS,0CAAE,aAAa,mCAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,CAChF,IAAC,MAAM,IAAC,IAAI,QAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,MAAM,EAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,YAAY,CAAC,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC,IACjH,YAAY,CAAC,KAAK,CACZ,CACV;YACD,IAAC,MAAM,IAAC,IAAI,QAAC,SAAS,EAAC,MAAM,EAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,YAAY,CAAC,MAAM,eAAe,EAAE,CAAC,WAErF,CACG,CACd,CAAC;KACH;AACH,CAAC,CAAA;AAED,eAAe,kBAAkB,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext } from 'react';\nimport { jsx } from '@emotion/react';\nimport { Button, ButtonGroup } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { ExportFormatConfiguration } from '../../../types';\nimport { BrowserCtx } from '../../BrowserCtx';\n\n\nexport const ExportSidebarBlock: React.FC<Record<never, never>> = function () {\n const { writeFileToFilesystem, getObjectData, getBlob } = useContext(DatasetContext);\n const { selectedRegisterItem } = useContext(BrowserCtx);\n\n async function handleExport(bufferData: Uint8Array) {\n if (!writeFileToFilesystem) {\n throw new Error(\"Unable to export: filesystem write function unavailable\");\n }\n\n await writeFileToFilesystem({\n dialogOpts: {\n prompt: \"Choose location to export to\",\n filters: [{ name: 'All files', extensions: ['*'] }],\n },\n bufferData,\n });\n }\n\n async function getExportedData(formatConfig?: ExportFormatConfiguration<any>): Promise<Uint8Array> {\n if (!selectedRegisterItem) {\n throw new Error(\"Unable to export item: current item data not available\");\n }\n if (!getBlob) {\n throw new Error(\"Unable to export item: no blob helper\");\n }\n if (formatConfig) {\n return await formatConfig.exportItem(selectedRegisterItem.item, { getObjectData, getBlob });\n } else {\n return await getBlob(JSON.stringify(selectedRegisterItem.item));\n }\n }\n\n if (!selectedRegisterItem) {\n return <></>;\n } else {\n return (\n <ButtonGroup vertical fill>\n {(selectedRegisterItem?.itemClass?.exportFormats ?? []).map((exportFormat, idx) =>\n <Button fill key={idx} alignText=\"left\" onClick={async () => await handleExport(await getExportedData(exportFormat))}>\n {exportFormat.label}\n </Button>\n )}\n <Button fill alignText=\"left\" onClick={async () => await handleExport(await getExportedData())}>\n JSON\n </Button>\n </ButtonGroup>\n );\n }\n}\n\nexport default ExportSidebarBlock;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/views/sidebar/ListItem.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,+BAA+B;AAC/B,MAAM,QAAQ,GACd,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE;IAClC,MAAM,EAAE,YAAY,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,KAAK,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,gCAAgC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;IACxC,MAAM,WAAW,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/views/sidebar/ListItem.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,+BAA+B;AAC/B,MAAM,QAAQ,GACd,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE;IAClC,MAAM,EAAE,YAAY,EAAE,gCAAgC,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,KAAK,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,gCAAgC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC;IACxC,MAAM,WAAW,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC;IAErC,MAAM,QAAQ,GAAG,WAAW;QAC1B,CAAC,CAAC,IAAC,YAAY,IACX,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,OAAO,GAChB;QACJ,CAAC,CAAC,cAAM,GAAG,EAAE,GAAG,CAAA,aAAa;;YACF,UAAU;gBAC5B,CAAC;IAEZ,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA;AAGD,eAAe,QAAQ,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport type { RegisterItem } from '../../types';\nimport { BrowserCtx } from '../BrowserCtx';\nimport { itemPathToItemRef } from '../itemPathUtils';\n\n\n/** Register item list view. */\nconst ListItem: React.FC<{ objectData: RegisterItem<any>, objectPath: string }> =\nfunction ({ objectData, objectPath }) {\n const { subregisters, getRelatedItemClassConfiguration } = useContext(BrowserCtx);\n const itemRef = itemPathToItemRef(subregisters !== undefined, objectPath);\n const clsConfig = getRelatedItemClassConfiguration(itemRef.classID);\n const ListItemView = clsConfig.itemView;\n const itemPayload = objectData?.data;\n\n const itemView = itemPayload\n ? <ListItemView\n itemData={itemPayload}\n itemRef={itemRef}\n />\n : <span css={css`opacity: .4`}>\n (missing item data at {objectPath})\n </span>;\n\n return itemView;\n}\n\n\nexport default ListItem;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Registration/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useEffect, useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Icon } from '@blueprintjs/core';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\n//import { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport { type Base as BaseCR, hasSubmitterInput, isDisposed, hadBeenProposed } from '../../../types/cr';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { Datestamp } from '../../../views/util';\nimport { Protocols } from '../../protocolRegistry';\n\n\nexport const PendingChangeRequestsBlock: React.FC<Record<never, never>> = function () {\n const { stakeholder } = useContext(BrowserCtx);\n const stakeholderUsername = stakeholder?.gitServerUsername;\n const stakeholderCondition = stakeholderUsername\n ? `obj.submittingStakeholderGitServerUsername === \"${stakeholderUsername}\"`\n : 'false';\n // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n const query = `!obj.timeDisposed && (obj.state !== \"draft\" || ${stakeholderCondition})`;\n\n return <ChangeRequestListBlock impliedQuery={query} />;\n};\n\n\nexport const ChangeRequestHistoryBlock: React.FC<Record<never, never>> = function () {\n return <ChangeRequestListBlock impliedQuery={DISPOSED_CR_QUERY} />;\n};\n\n\nconst CR_BASE_QUERY = 'objPath.indexOf(\"/proposals/\") === 0 && objPath.endsWith(\"main.yaml\")';\nconst DISPOSED_CR_QUERY = 'obj.timeDisposed !== undefined && obj.timeDisposed !== null';\n\n\ninterface ChangeRequestBlockState {\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\ntype ChangeRequestBlockAction =\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\n\nconst ChangeRequestListBlock: React.FC<{ impliedQuery: string }> = function ({ impliedQuery }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { selectedRegisterItem } = useContext(BrowserCtx);\n\n const initialState: ChangeRequestBlockState = {\n quickSubstringQuery: '',\n selectedItemPath: null,\n };\n\n const itemPath = selectedRegisterItem\n ? itemRefToItemPath(selectedRegisterItem.ref)\n : selectedRegisterItem;\n // ^ Adopt undefined value if no data is available, null if item is not selected\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<ChangeRequestBlockState, ChangeRequestBlockAction>)(\n `change-request-list-block-${itemPath === null ? 'global' : itemPath}-${impliedQuery}`,\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\n case 'update-quick-substring-query':\n return {\n ...prevState,\n quickSubstringQuery: action.payload.substring,\n };\n case 'select-item':\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n default:\n throw new Error(\"Unexpected search state\");\n }\n },\n initialState,\n null);\n\n const query = itemPath\n ? `return ${CR_BASE_QUERY} && ${impliedQuery} && obj.items[\"${itemPath}\"] !== undefined`\n : itemPath === null\n ? `return ${CR_BASE_QUERY} && ${impliedQuery}`\n // If item data is loading or unavailable, don’t show any CRs\n // to avoid flashing all CRs during item switching.\n : `return false`;\n\n const selectedCRPath: string | null =\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.CHANGE_REQUEST}:`)\n ? focusedTabURI.split(':')[1]\n : null;\n\n useEffect(() => {\n if (itemPath !== undefined && selectedCRPath) {\n setTimeout(() => {\n dispatch({ type: 'select-item', payload: { itemPath: selectedCRPath } });\n }, 500);\n }\n }, [itemPath, selectedCRPath]);\n\n return (\n <ChangeRequestSearchResultList\n queryExpression={query}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={itemPath => dispatch({ type: 'select-item', payload: { itemPath }})}\n onOpenItem={(itemPath) => spawnTab(`${Protocols.CHANGE_REQUEST}:${itemPath}`)}\n />\n )\n};\n\n\nconst CRHistoryItem: React.FC<{\n objectData: BaseCR,\n objectPath: string,\n}> = function ({ objectData }) {\n const { activeChangeRequestID, setActiveChangeRequestID } = useContext(BrowserCtx);\n const isActive = activeChangeRequestID === objectData.id;\n const canToggle = activeChangeRequestID == null || isActive;\n\n const justification = hasSubmitterInput(objectData) ? objectData.justification : 'N/A';\n\n return <span title={`${justification} (proposal ID: ${objectData.id})`}>\n <Icon\n icon={isActive ? 'record' : 'dot'}\n css={css`vertical-align: top; ${canToggle ? 'cursor: pointer; transition: all .2s;' : 'opacity: .5;'}`}\n title={canToggle\n ? isActive\n ? \"Click to deactivate this proposal\"\n : \"Click to activate this proposal\"\n : undefined}\n onClick={canToggle\n ? () => setActiveChangeRequestID?.(activeChangeRequestID === objectData.id ? null : objectData.id)\n : undefined}\n intent={isActive\n ? 'danger'\n : canToggle\n ? 'primary'\n : undefined}\n />\n \n {isDisposed(objectData)\n ? <><Datestamp date={objectData.timeDisposed} title=\"Disposed\" />: </>\n : hadBeenProposed(objectData)\n ? <><Datestamp date={objectData.timeProposed} title=\"Proposed\" />: </>\n : null}\n {justification}\n </span>;\n};\n\n\nconst ChangeRequestSearchResultList = makeSearchResultList<BaseCR>(CRHistoryItem, (objPath) => ({\n name: 'Prp.',\n iconProps: {\n icon: 'lightbulb',\n title: objPath,\n htmlTitle: `icon for proposal at ${objPath}`,\n },\n}));\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Registration/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useEffect, useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Icon } from '@blueprintjs/core';\nimport { TabbedWorkspaceContext } from '@riboseinc/paneron-extension-kit/widgets/TabbedWorkspace/context';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { PersistentStateReducerHook } from '@riboseinc/paneron-extension-kit/usePersistentStateReducer';\n//import { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport makeSearchResultList from '@riboseinc/paneron-extension-kit/widgets/SearchResultList';\nimport { type Base as BaseCR, hasSubmitterInput, isDisposed, hadBeenProposed } from '../../../types/cr';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { Datestamp } from '../../../views/util';\nimport { Protocols } from '../../protocolRegistry';\n\n\nexport const PendingChangeRequestsBlock: React.FC<Record<never, never>> = function () {\n const { stakeholder } = useContext(BrowserCtx);\n const stakeholderUsername = stakeholder?.gitServerUsername;\n const stakeholderCondition = stakeholderUsername\n ? `obj.submittingStakeholderGitServerUsername === \"${stakeholderUsername}\"`\n : 'false';\n // Don’t show drafts in the list of pending proposals, unless it’s user’s own drafts.\n const query = `!obj.timeDisposed && (obj.state !== \"draft\" || ${stakeholderCondition})`;\n\n return <ChangeRequestListBlock impliedQuery={query} />;\n};\n\n\nexport const ChangeRequestHistoryBlock: React.FC<Record<never, never>> = function () {\n return <ChangeRequestListBlock impliedQuery={DISPOSED_CR_QUERY} />;\n};\n\n\nconst CR_BASE_QUERY = 'objPath.indexOf(\"/proposals/\") === 0 && objPath.endsWith(\"main.yaml\")';\nconst DISPOSED_CR_QUERY = 'obj.timeDisposed !== undefined && obj.timeDisposed !== null';\n\n\ninterface ChangeRequestBlockState {\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\ntype ChangeRequestBlockAction =\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\n\nconst ChangeRequestListBlock: React.FC<{ impliedQuery: string }> = function ({ impliedQuery }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab, focusedTabURI } = useContext(TabbedWorkspaceContext);\n const { selectedRegisterItem } = useContext(BrowserCtx);\n\n const initialState: ChangeRequestBlockState = {\n quickSubstringQuery: '',\n selectedItemPath: null,\n };\n\n const itemPath = selectedRegisterItem\n ? itemRefToItemPath(selectedRegisterItem.ref)\n : selectedRegisterItem;\n // ^ Adopt undefined value if no data is available, null if item is not selected\n\n const [ state, dispatch, ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<ChangeRequestBlockState, ChangeRequestBlockAction>)(\n `change-request-list-block-${itemPath === null ? 'global' : itemPath}-${impliedQuery}`,\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\n case 'update-quick-substring-query':\n return {\n ...prevState,\n quickSubstringQuery: action.payload.substring,\n };\n case 'select-item':\n return {\n ...prevState,\n selectedItemPath: action.payload.itemPath,\n };\n default:\n throw new Error(\"Unexpected search state\");\n }\n },\n initialState,\n null);\n\n const query = itemPath\n ? `return ${CR_BASE_QUERY} && ${impliedQuery} && obj.items[\"${itemPath}\"] !== undefined`\n : itemPath === null\n ? `return ${CR_BASE_QUERY} && ${impliedQuery}`\n // If item data is loading or unavailable, don’t show any CRs\n // to avoid flashing all CRs during item switching.\n : `return false`;\n\n const selectedCRPath: string | null =\n focusedTabURI && focusedTabURI.startsWith(`${Protocols.CHANGE_REQUEST}:`)\n ? focusedTabURI.split(':')[1]\n : null;\n\n useEffect(() => {\n if (itemPath !== undefined && selectedCRPath) {\n setTimeout(() => {\n dispatch({ type: 'select-item', payload: { itemPath: selectedCRPath } });\n }, 500);\n }\n }, [itemPath, selectedCRPath]);\n\n return (\n <ChangeRequestSearchResultList\n queryExpression={query}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={itemPath => dispatch({ type: 'select-item', payload: { itemPath }})}\n onOpenItem={(itemPath) => spawnTab(`${Protocols.CHANGE_REQUEST}:${itemPath}`)}\n />\n )\n};\n\n\nconst CRHistoryItem: React.FC<{\n objectData: BaseCR,\n objectPath: string,\n}> = function ({ objectData }) {\n const { activeChangeRequestID, setActiveChangeRequestID } = useContext(BrowserCtx);\n const isActive = activeChangeRequestID === objectData.id;\n const canToggle = activeChangeRequestID == null || isActive;\n\n const justification = hasSubmitterInput(objectData) ? objectData.justification : 'N/A';\n\n return <span title={`${justification} (proposal ID: ${objectData.id})`}>\n <Icon\n icon={isActive ? 'record' : 'dot'}\n css={css`vertical-align: top; ${canToggle ? 'cursor: pointer; transition: all .2s;' : 'opacity: .5;'}`}\n title={canToggle\n ? isActive\n ? \"Click to deactivate this proposal\"\n : \"Click to activate this proposal\"\n : undefined}\n onClick={canToggle\n ? () => setActiveChangeRequestID?.(activeChangeRequestID === objectData.id ? null : objectData.id)\n : undefined}\n intent={isActive\n ? 'danger'\n : canToggle\n ? 'primary'\n : undefined}\n />\n \n {isDisposed(objectData)\n ? <><Datestamp date={objectData.timeDisposed} title=\"Disposed\" />: </>\n : hadBeenProposed(objectData)\n ? <><Datestamp date={objectData.timeProposed} title=\"Proposed\" />: </>\n : null}\n {justification}\n </span>;\n};\n\n\nconst ChangeRequestSearchResultList = makeSearchResultList<BaseCR>(CRHistoryItem, (objPath) => ({\n name: 'Prp.',\n iconProps: {\n icon: 'lightbulb',\n title: objPath,\n htmlTitle: `icon for proposal at ${objPath}`,\n },\n}));\n"]}
|
|
@@ -50,6 +50,8 @@ const Search = function ({
|
|
|
50
50
|
className,
|
|
51
51
|
style
|
|
52
52
|
}) {
|
|
53
|
+
var _a;
|
|
54
|
+
|
|
53
55
|
const {
|
|
54
56
|
usePersistentDatasetStateReducer
|
|
55
57
|
} = (0, _react.useContext)(_context.DatasetContext);
|
|
@@ -72,7 +74,7 @@ const Search = function ({
|
|
|
72
74
|
quickSubstringQuery: '',
|
|
73
75
|
selectedItemPath: null
|
|
74
76
|
};
|
|
75
|
-
const [state, dispatch, stateRecalled] = usePersistentDatasetStateReducer(stateName
|
|
77
|
+
const [state, dispatch, stateRecalled] = usePersistentDatasetStateReducer(stateName !== null && stateName !== void 0 ? stateName : 'search-sidebar', undefined, undefined, (prevState, action) => {
|
|
76
78
|
switch (action.type) {
|
|
77
79
|
case 'update-query':
|
|
78
80
|
return { ...prevState,
|
|
@@ -93,7 +95,7 @@ const Search = function ({
|
|
|
93
95
|
throw new Error("Unexpected search state");
|
|
94
96
|
}
|
|
95
97
|
}, initialState, null);
|
|
96
|
-
const selectedItemPath = selectedRegisterItem
|
|
98
|
+
const selectedItemPath = (selectedRegisterItem === null || selectedRegisterItem === void 0 ? void 0 : selectedRegisterItem.ref) ? (0, _itemPathUtils.itemRefToItemPath)(selectedRegisterItem.ref, changeRequest === null || changeRequest === void 0 ? void 0 : changeRequest.id) : null;
|
|
97
99
|
(0, _react.useEffect)(() => {
|
|
98
100
|
if (selectedItemPath) {
|
|
99
101
|
dispatch({
|
|
@@ -104,7 +106,7 @@ const Search = function ({
|
|
|
104
106
|
});
|
|
105
107
|
}
|
|
106
108
|
}, [selectedItemPath]);
|
|
107
|
-
const quickSearchString = (state.quickSubstringQuery
|
|
109
|
+
const quickSearchString = ((_a = state.quickSubstringQuery) !== null && _a !== void 0 ? _a : '').trim();
|
|
108
110
|
const withSearchString = state.query.criteria.criteria.length < 1 && quickSearchString !== '' ? {
|
|
109
111
|
require: 'all',
|
|
110
112
|
criteria: [{
|
|
@@ -125,7 +127,7 @@ const Search = function ({
|
|
|
125
127
|
: 'false';
|
|
126
128
|
const stateRecalledDebounced = (0, _useDebounce.default)(stateRecalled, 100);
|
|
127
129
|
const queryExpressionDebounced = (0, _useDebounce.default)(effectiveQueryExpression, stateRecalledDebounced ? 500 : 0);
|
|
128
|
-
const datasetObjectSearchQueryExpression = queryExpressionDebounced != 'false' ? (0, _itemQueryUtils.getRegisterItemQuery)(queryExpressionDebounced, changeRequest
|
|
130
|
+
const datasetObjectSearchQueryExpression = queryExpressionDebounced != 'false' ? (0, _itemQueryUtils.getRegisterItemQuery)(queryExpressionDebounced, changeRequest !== null && changeRequest !== void 0 ? changeRequest : undefined) : 'return false';
|
|
129
131
|
return (0, _react2.jsx)("div", {
|
|
130
132
|
css: (0, _react2.css)`display: flex; flex-flow: column nowrap;`,
|
|
131
133
|
className: className,
|
|
@@ -161,7 +163,7 @@ const Search = function ({
|
|
|
161
163
|
itemPath
|
|
162
164
|
}
|
|
163
165
|
}),
|
|
164
|
-
onOpenItem: onOpenItem
|
|
166
|
+
onOpenItem: onOpenItem !== null && onOpenItem !== void 0 ? onOpenItem : itemPath => spawnTab(`${_protocolRegistry.Protocols.ITEM_DETAILS}:${itemPath}`)
|
|
165
167
|
}) : null));
|
|
166
168
|
};
|
|
167
169
|
|