@riboseinc/paneron-registry-kit 2.2.5 → 2.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +18 -0
- package/index.js +23 -3
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/types/item.d.ts +1 -1
- package/types/item.js.map +1 -1
- package/types/views.d.ts +1 -1
- package/types/views.js.map +1 -1
- package/views/SearchQuery.js +8 -9
- package/views/SearchQuery.js.map +1 -1
- package/views/change-request/Proposals.d.ts +3 -3
- package/views/change-request/Proposals.js +142 -140
- package/views/change-request/Proposals.js.map +1 -1
- package/views/detail/ChangeRequest/index.d.ts +1 -1
- package/views/detail/ChangeRequest/index.js +26 -31
- package/views/detail/ChangeRequest/index.js.map +1 -1
- package/views/detail/RegisterItem/index.d.ts +9 -1
- package/views/detail/RegisterItem/index.js +211 -181
- package/views/detail/RegisterItem/index.js.map +1 -1
- package/views/index.js +5 -5
- package/views/index.js.map +1 -1
- package/views/sidebar/Browse/index.js +15 -17
- package/views/sidebar/Browse/index.js.map +1 -1
- package/views/sidebar/ListItem.js +2 -3
- package/views/sidebar/ListItem.js.map +1 -1
- package/views/sidebar/Search/index.js +2 -4
- package/views/sidebar/Search/index.js.map +1 -1
- package/views/util.js +2 -3
- package/views/util.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Search/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useContext, useCallback, useMemo, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { 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';\nimport useDebounce from '@riboseinc/paneron-extension-kit/useDebounce';\nimport { type CriteriaGroup, BLANK_CRITERIA } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport { RAW_SUBSTRING } from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport type { RegisterItem } from '../../../types';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport SearchQuery from '../../SearchQuery';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\n// TODO: Move Search widget core out of sidebar, as it’s used elsewhere too.\n\n\ninterface Query {\n criteria: CriteriaGroup;\n}\ninterface State {\n query: Query;\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\ntype Action =\n | { type: 'update-query'; payload: { query: Query; }; }\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\n};\n\nconst Search: React.FC<{\n /**\n * Criteria that will always apply.\n * Used e.g. in superseding item selection\n * (to limit to the same item class).\n */\n implicitCriteria?: CriteriaGroup,\n\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n\n stateName?: string\n\n className?: string\n style?: React.CSSProperties\n}> =\nfunction ({ implicitCriteria, availableClassIDs, stateName, onOpenItem, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { keyExpression, itemClasses, subregisters, selectedRegisterItem } = useContext(BrowserCtx);\n const { changeRequest } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, stateRecalled ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'search-sidebar',\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\n case 'update-query':\n return {\n ...prevState,\n query: action.payload.query,\n };\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 selectedItemPath = selectedRegisterItem?.ref\n ? itemRefToItemPath(selectedRegisterItem.ref, changeRequest?.id)\n : null;\n\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n const effectiveQueryExpression = useMemo(() => {\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n const withSearchString: CriteriaGroup =\n state.query.criteria.criteria.length < 1 && quickSearchString !== ''\n ? {\n require: 'all',\n criteria: [\n {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters }),\n },\n ],\n }\n : state.query.criteria\n const withImplicit: CriteriaGroup = implicitCriteria\n ? {\n require: 'all',\n criteria: [ implicitCriteria, withSearchString ],\n }\n : withSearchString;\n return withImplicit.criteria.length > 0\n ? criteriaGroupToQueryExpression(withImplicit)\n // If no criteria provided, don’t show anything by default.\n : 'false';\n }, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters]);\n\n const stateRecalledDebounced = useDebounce(stateRecalled, 100);\n const queryExpressionDebounced = useDebounce(\n effectiveQueryExpression,\n stateRecalledDebounced ? 500 : 0,\n );\n\n const datasetObjectSearchQueryExpression = useMemo((() =>\n queryExpressionDebounced != 'false'\n ? getRegisterItemQuery(queryExpressionDebounced, changeRequest ?? undefined)\n : 'return false'\n ), [queryExpressionDebounced, changeRequest]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n\n\n const handleOpenItem = useCallback(\n onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [onOpenItem, spawnTab]);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <SearchQuery\n rootCriteria={state.query.criteria}\n quickSearchString={state.quickSubstringQuery}\n availableClassIDs={availableClassIDs}\n onCriteriaChange={useCallback((\n criteria => dispatch({ type: 'update-query', payload: { query: { criteria } } })\n ), [dispatch])}\n onQuickSearchStringChange={useCallback((\n substring => dispatch({ type: 'update-quick-substring-query', payload: { substring } })\n ), [dispatch])}\n css={css`padding: 5px;`}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\n </div>\n </div>\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 Search;\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/views/sidebar/Search/index.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useContext, useCallback, useMemo, useEffect } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport { 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';\nimport useDebounce from '@riboseinc/paneron-extension-kit/useDebounce';\nimport { type CriteriaGroup, BLANK_CRITERIA } from '../../FilterCriteria/models';\nimport criteriaGroupToQueryExpression from '../../FilterCriteria/criteriaGroupToQueryExpression';\nimport { RAW_SUBSTRING } from '../../FilterCriteria/CRITERIA_CONFIGURATION';\nimport { ChangeRequestContext } from '../../change-request/ChangeRequestContext';\nimport type { RegisterItem } from '../../../types';\nimport { itemRefToItemPath } from '../../itemPathUtils';\nimport { getRegisterItemQuery } from '../../itemQueryUtils';\nimport { BrowserCtx } from '../../BrowserCtx';\nimport SearchQuery from '../../SearchQuery';\nimport ListItem from '../ListItem';\nimport { Protocols } from '../../protocolRegistry';\n\n\n// TODO: Move Search widget core out of sidebar, as it’s used elsewhere too.\n\n\ninterface Query {\n criteria: CriteriaGroup;\n}\ninterface State {\n query: Query;\n quickSubstringQuery: string;\n selectedItemPath: string | null;\n}\ntype Action =\n | { type: 'update-query'; payload: { query: Query; }; }\n | { type: 'update-quick-substring-query'; payload: { substring: string; }; }\n | { type: 'select-item'; payload: { itemPath: string | null; }; }\n\nconst initialState: State = {\n query: { criteria: BLANK_CRITERIA },\n quickSubstringQuery: '',\n selectedItemPath: null,\n};\n\nconst Search: React.FC<{\n /**\n * Criteria that will always apply.\n * Used e.g. in superseding item selection\n * (to limit to the same item class).\n */\n implicitCriteria?: CriteriaGroup,\n\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n\n stateName?: string\n\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ implicitCriteria, availableClassIDs, stateName, onOpenItem, className, style }) {\n const { usePersistentDatasetStateReducer } = useContext(DatasetContext);\n const { spawnTab } = useContext(TabbedWorkspaceContext);\n const { keyExpression, itemClasses, subregisters, selectedRegisterItem } = useContext(BrowserCtx);\n const { changeRequest } = useContext(ChangeRequestContext);\n\n const [ state, dispatch, stateRecalled ] = (usePersistentDatasetStateReducer as PersistentStateReducerHook<State, Action>)(\n stateName ?? 'search-sidebar',\n undefined,\n undefined,\n (prevState, action) => {\n switch (action.type) {\n case 'update-query':\n return {\n ...prevState,\n query: action.payload.query,\n };\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 selectedItemPath = selectedRegisterItem?.ref\n ? itemRefToItemPath(selectedRegisterItem.ref, changeRequest?.id)\n : null;\n\n useEffect(() => {\n if (selectedItemPath) {\n dispatch({ type: 'select-item', payload: { itemPath: selectedItemPath } });\n }\n }, [selectedItemPath, dispatch]);\n\n const effectiveQueryExpression = useMemo(() => {\n const quickSearchString = (state.quickSubstringQuery ?? '').trim();\n const withSearchString: CriteriaGroup =\n state.query.criteria.criteria.length < 1 && quickSearchString !== ''\n ? {\n require: 'all',\n criteria: [\n {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters }),\n },\n ],\n }\n : state.query.criteria\n const withImplicit: CriteriaGroup = implicitCriteria\n ? {\n require: 'all',\n criteria: [ implicitCriteria, withSearchString ],\n }\n : withSearchString;\n return withImplicit.criteria.length > 0\n ? criteriaGroupToQueryExpression(withImplicit)\n // If no criteria provided, don’t show anything by default.\n : 'false';\n }, [state.query.criteria, state.quickSubstringQuery, itemClasses, subregisters]);\n\n const stateRecalledDebounced = useDebounce(stateRecalled, 100);\n const queryExpressionDebounced = useDebounce(\n effectiveQueryExpression,\n stateRecalledDebounced ? 500 : 0,\n );\n\n const datasetObjectSearchQueryExpression = useMemo((() =>\n queryExpressionDebounced != 'false'\n ? getRegisterItemQuery(queryExpressionDebounced, changeRequest ?? undefined)\n : 'return false'\n ), [queryExpressionDebounced, changeRequest]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n\n\n const handleOpenItem = useCallback(\n onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)),\n [onOpenItem, spawnTab]);\n\n return (\n <div css={css`display: flex; flex-flow: column nowrap;`} className={className} style={style}>\n <SearchQuery\n rootCriteria={state.query.criteria}\n quickSearchString={state.quickSubstringQuery}\n availableClassIDs={availableClassIDs}\n onCriteriaChange={useCallback((\n criteria => dispatch({ type: 'update-query', payload: { query: { criteria } } })\n ), [dispatch])}\n onQuickSearchStringChange={useCallback((\n substring => dispatch({ type: 'update-quick-substring-query', payload: { substring } })\n ), [dispatch])}\n css={css`padding: 5px;`}\n />\n <div css={css`flex: 1;`}>\n <SearchResultList\n queryExpression={datasetObjectSearchQueryExpression}\n keyExpression={keyExpression}\n selectedItemPath={state.selectedItemPath}\n onSelectItem={handleSelectItem}\n onOpenItem={handleOpenItem}\n />\n </div>\n </div>\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 Search;\n"]}
|
package/views/util.js
CHANGED
|
@@ -42,7 +42,7 @@ function maybeEllipsizeString(str, maxLength = 20) {
|
|
|
42
42
|
return str.length > maxLength ? `${str.slice(0, maxLength)}…` : str;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
const RegisterHelmet = function (props) {
|
|
45
|
+
const RegisterHelmet = (0, _react.memo)(function (props) {
|
|
46
46
|
const {
|
|
47
47
|
title: datasetTitle
|
|
48
48
|
} = (0, _react.useContext)(_context.DatasetContext);
|
|
@@ -50,8 +50,7 @@ const RegisterHelmet = function (props) {
|
|
|
50
50
|
titleTemplate: `%s in ${datasetTitle} register`,
|
|
51
51
|
defaultTitle: `${datasetTitle} register`
|
|
52
52
|
}, props.children);
|
|
53
|
-
};
|
|
54
|
-
|
|
53
|
+
});
|
|
55
54
|
exports.RegisterHelmet = RegisterHelmet;
|
|
56
55
|
|
|
57
56
|
const PropertyDetailView = function ({
|
package/views/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/views/util.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,iCAAiC;AACjC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAc,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/views/util.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\n//import log from 'electron-log';\nimport format from 'date-fns/format';\nimport React, { memo, useContext } from 'react';\nimport { Helmet, HelmetProps } from 'react-helmet';\nimport { css, jsx } from '@emotion/react';\nimport { FormGroup, FormGroupProps, Colors } from '@blueprintjs/core';\nimport { DatasetContext } from '@riboseinc/paneron-extension-kit/context';\nimport type { ItemClassConfiguration, RelatedItemClassConfiguration } from '../types';\nexport { GenericRelatedItemView } from './GenericRelatedItemView';\n\n\n/**\n * Get give string truncated & with ellipsis appended\n * if its length exceeds given number of characters.\n */\nexport function maybeEllipsizeString(\n str: string,\n maxLength: number = 20,\n): string {\n return str.length > maxLength\n ? `${str.slice(0, maxLength)}…`\n : str;\n}\n\n\nexport const RegisterHelmet: React.FC<HelmetProps> = memo(function (props) {\n const { title: datasetTitle } = useContext(DatasetContext);\n\n return (\n <Helmet\n titleTemplate={`%s in ${datasetTitle} register`}\n defaultTitle={`${datasetTitle} register`}>\n {props.children}\n </Helmet>\n );\n});\n\n\nexport const PropertyDetailView: React.FC<{\n title: FormGroupProps[\"label\"]\n secondaryTitle?: FormGroupProps[\"labelInfo\"]\n inline?: FormGroupProps[\"inline\"]\n className?: string\n}> = function ({ title, secondaryTitle, inline, children, className }) {\n return (\n <FormGroup\n label={`${title}:`}\n labelInfo={secondaryTitle}\n css={css`&, &.bp4-inline { label.bp4-label { font-weight: bold; line-height: unset } }`}\n className={className}\n inline={inline}>\n {children}\n </FormGroup>\n );\n};\n\n\n/** Formats given date as a span with tooltip set to full ISO date & time. */\nexport const Datestamp: React.FC<{\n date: Date\n title?: string\n className?: string\n}> = function ({ date, title, className }) {\n const asString = formatDate(date);\n return <span\n className={className}\n title={`${title ? `${title}: ` : ''}${date?.toString() ?? 'N/A'}`}>\n {asString}\n </span>;\n};\n\n\n/** Foramts given date as plain text. */\nexport function formatDate(date: Date): string {\n try {\n return format(date, 'yyyy-MM-dd');\n } catch (e) {\n return `Invalid date (${e})`;\n }\n}\n\n\nexport const _getRelatedClass = (classes: Record<string, ItemClassConfiguration<any>>) => {\n return (clsID: string): RelatedItemClassConfiguration => {\n const cfg = classes[clsID];\n return {\n title: cfg.meta.title,\n // TODO: The itemView/listItemView inconsistency is annoying\n itemView: cfg.views.listItemView,\n };\n };\n};\n\n\n/**\n * Suitable for use as tab contents for TabbedWorkspace.\n * Provides top bar with actions and main content.\n */\nexport const TabContentsWithActions: React.FC<{\n actions: JSX.Element;\n main: JSX.Element;\n className?: string;\n}> = function ({ actions, main, className }) {\n return (\n <div css={css`\n position: absolute; inset: 0;\n display: flex; flex-flow: column nowrap;\n `} className={className}>\n <div css={css`flex: 0; padding: 10px; display: flex; flex-flow: row wrap; gap: 10px;`}>\n {actions}\n </div>\n <div css={css`\n position: relative;\n flex: 1;\n padding: 10px;\n overflow-y: auto;\n background: ${Colors.GRAY5};\n .bp4-dark & { background: ${Colors.DARK_GRAY2}; }\n `}>\n {main}\n </div>\n </div>\n )\n}\n"]}
|