@riboseinc/paneron-registry-kit 2.2.5 → 2.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riboseinc/paneron-registry-kit",
3
- "version": "2.2.5",
3
+ "version": "2.2.6",
4
4
  "main": "index.js",
5
5
  "author": "Ribose Inc. <open.source@ribose.com>",
6
6
  "scripts": {
@@ -28,7 +28,7 @@
28
28
  "@blueprintjs/select": "~4.9.10",
29
29
  "@emotion/react": "^11.10.6",
30
30
  "@emotion/styled": "^11.10.6",
31
- "@riboseinc/paneron-extension-kit": "2.2.3",
31
+ "@riboseinc/paneron-extension-kit": "2.2.4",
32
32
  "@types/react": "17.0.53",
33
33
  "@types/react-dom": "^17.0.2",
34
34
  "@types/react-helmet": "^6.1.2",
@@ -29,7 +29,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
29
29
 
30
30
  /** @jsxFrag React.Fragment */
31
31
  //import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';
32
- const SearchQuery = function ({
32
+ const SearchQuery = (0, _react.memo)(function ({
33
33
  rootCriteria,
34
34
  onCriteriaChange,
35
35
  quickSearchString,
@@ -124,14 +124,13 @@ const SearchQuery = function ({
124
124
  }), (0, _react2.jsx)("div", {
125
125
  key: "query",
126
126
  css: (0, _react2.css)`
127
- margin-top: 5px;
128
- padding: 0 10px 10px 10px;
129
- color: ${_core.Colors.GRAY3};
130
- font-size: 90%;
131
- overflow-wrap: break-word;
132
- `
127
+ margin-top: 5px;
128
+ padding: 0 10px 10px 10px;
129
+ color: ${_core.Colors.GRAY3};
130
+ font-size: 90%;
131
+ overflow-wrap: break-word;
132
+ `
133
133
  }, "Query used: ", (0, _react2.jsx)("code", null, (0, _criteriaGroupToQueryExpression.default)(rootCriteria)))) : null);
134
- };
135
-
134
+ });
136
135
  var _default = SearchQuery;
137
136
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { useState, useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, ControlGroup, Colors, InputGroup, Tag, ButtonGroup } from '@blueprintjs/core';\nimport CriteriaTree from './FilterCriteria';\nimport { CUSTOM_CONDITION, RAW_SUBSTRING } from './FilterCriteria/CRITERIA_CONFIGURATION';\nimport { CriteriaGroup, Criterion } from './FilterCriteria/models';\nimport criteriaGroupToQueryExpression from './FilterCriteria/criteriaGroupToQueryExpression';\n//import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';\nimport { BrowserCtx } from './BrowserCtx';\n\n\n\nconst SearchQuery: React.FC<{\n rootCriteria: CriteriaGroup;\n onCriteriaChange?: (rootCriteria: CriteriaGroup) => void;\n\n quickSearchString: string;\n onQuickSearchStringChange?: (searchString: string) => void;\n\n availableClassIDs?: string[];\n className?: string;\n}> = function ({\n rootCriteria,\n onCriteriaChange,\n quickSearchString,\n onQuickSearchStringChange,\n availableClassIDs,\n className,\n}) {\n const { itemClasses, subregisters } = useContext(BrowserCtx);\n\n const [ editingAdvanced, toggleEditingAdvanced ] = useState<boolean>(false);\n\n const classIDs = availableClassIDs ?? Object.keys(itemClasses);\n\n const hasAdvancedQuery = rootCriteria.criteria.length > 0;\n\n function makeDefaultCriteria(): Criterion {\n if (quickSearchString) {\n return {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters },\n ),\n }\n } else {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: 'false' },\n { itemClasses, subregisters },\n ),\n }\n }\n }\n\n return (\n <ControlGroup fill vertical className={className}>\n <InputGroup\n fill\n small\n disabled={!onQuickSearchStringChange || hasAdvancedQuery}\n value={hasAdvancedQuery ? '' : quickSearchString}\n leftIcon=\"search\"\n placeholder=\"Quick search\"\n title={!hasAdvancedQuery\n ? \"Search for a substring occurring anywhere within serialized item data.\"\n : \"Advanced query overrides quick search.\"}\n css={css`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`}\n rightElement={<Button\n disabled={!onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery}\n onClick={() => onQuickSearchStringChange?.('')}\n small\n minimal\n icon=\"cross\"\n title=\"Clear quick search\" />}\n onChange={evt => onQuickSearchStringChange?.(evt.currentTarget.value)} />\n <ButtonGroup fill>\n <Button\n fill\n small\n title=\"Edit advanced search query\"\n icon='filter'\n onClick={!hasAdvancedQuery\n ? (() => {\n onCriteriaChange!({ criteria: [makeDefaultCriteria()], require: 'all' });\n toggleEditingAdvanced(true);\n })\n : () => toggleEditingAdvanced(v => !v)}\n active={editingAdvanced && hasAdvancedQuery}\n disabled={!hasAdvancedQuery && !onCriteriaChange}\n rightIcon={rootCriteria.criteria.length > 0\n ? <Tag intent=\"success\" round>on</Tag>\n : <Tag round>off</Tag>}>\n Advanced\n </Button>\n </ButtonGroup>\n {hasAdvancedQuery && editingAdvanced\n ? <>\n <CriteriaTree\n key=\"tree\"\n criteria={rootCriteria}\n onChange={onCriteriaChange}\n itemClasses={itemClasses}\n availableClassIDs={classIDs}\n subregisters={subregisters}\n css={css`max-height: 50vh; overflow-y: auto;`} />\n <div\n key=\"query\"\n css={css`\n margin-top: 5px;\n padding: 0 10px 10px 10px;\n color: ${Colors.GRAY3};\n font-size: 90%;\n overflow-wrap: break-word;\n `}>\n Query used: <code>{criteriaGroupToQueryExpression(rootCriteria)}</code>\n </div>\n </>\n : null}\n </ControlGroup>\n );\n };\n\nexport default SearchQuery;\n"]}
1
+ {"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../src/views/SearchQuery.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, useState, useContext } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport { Button, ControlGroup, Colors, InputGroup, Tag, ButtonGroup } from '@blueprintjs/core';\nimport CriteriaTree from './FilterCriteria';\nimport { CUSTOM_CONDITION, RAW_SUBSTRING } from './FilterCriteria/CRITERIA_CONFIGURATION';\nimport { CriteriaGroup, Criterion } from './FilterCriteria/models';\nimport criteriaGroupToQueryExpression from './FilterCriteria/criteriaGroupToQueryExpression';\n//import criteriaGroupToSummary from './FilterCriteria/criteriaGroupToSummary';\nimport { BrowserCtx } from './BrowserCtx';\n\n\nconst SearchQuery: React.FC<{\n rootCriteria: CriteriaGroup;\n onCriteriaChange?: (rootCriteria: CriteriaGroup) => void;\n\n quickSearchString: string;\n onQuickSearchStringChange?: (searchString: string) => void;\n\n availableClassIDs?: string[];\n className?: string;\n}> = memo(function ({\n rootCriteria,\n onCriteriaChange,\n quickSearchString,\n onQuickSearchStringChange,\n availableClassIDs,\n className,\n}) {\n const { itemClasses, subregisters } = useContext(BrowserCtx);\n\n const [ editingAdvanced, toggleEditingAdvanced ] = useState<boolean>(false);\n\n const classIDs = availableClassIDs ?? Object.keys(itemClasses);\n\n const hasAdvancedQuery = rootCriteria.criteria.length > 0;\n\n function makeDefaultCriteria(): Criterion {\n if (quickSearchString) {\n return {\n key: 'raw-substring',\n query: RAW_SUBSTRING.toQuery(\n { substring: quickSearchString },\n { itemClasses, subregisters },\n ),\n }\n } else {\n return {\n key: 'custom',\n query: CUSTOM_CONDITION.toQuery(\n { customExpression: 'false' },\n { itemClasses, subregisters },\n ),\n }\n }\n }\n\n return (\n <ControlGroup fill vertical className={className}>\n <InputGroup\n fill\n small\n disabled={!onQuickSearchStringChange || hasAdvancedQuery}\n value={hasAdvancedQuery ? '' : quickSearchString}\n leftIcon=\"search\"\n placeholder=\"Quick search\"\n title={!hasAdvancedQuery\n ? \"Search for a substring occurring anywhere within serialized item data.\"\n : \"Advanced query overrides quick search.\"}\n css={css`width: 200px; ${quickSearchString !== '' && !hasAdvancedQuery ? 'input { font-weight: bold; }' : ''}`}\n rightElement={<Button\n disabled={!onQuickSearchStringChange || quickSearchString === '' || hasAdvancedQuery}\n onClick={() => onQuickSearchStringChange?.('')}\n small\n minimal\n icon=\"cross\"\n title=\"Clear quick search\" />}\n onChange={evt => onQuickSearchStringChange?.(evt.currentTarget.value)} />\n <ButtonGroup fill>\n <Button\n fill\n small\n title=\"Edit advanced search query\"\n icon='filter'\n onClick={!hasAdvancedQuery\n ? (() => {\n onCriteriaChange!({ criteria: [makeDefaultCriteria()], require: 'all' });\n toggleEditingAdvanced(true);\n })\n : () => toggleEditingAdvanced(v => !v)}\n active={editingAdvanced && hasAdvancedQuery}\n disabled={!hasAdvancedQuery && !onCriteriaChange}\n rightIcon={rootCriteria.criteria.length > 0\n ? <Tag intent=\"success\" round>on</Tag>\n : <Tag round>off</Tag>}>\n Advanced\n </Button>\n </ButtonGroup>\n {hasAdvancedQuery && editingAdvanced\n ? <>\n <CriteriaTree\n key=\"tree\"\n criteria={rootCriteria}\n onChange={onCriteriaChange}\n itemClasses={itemClasses}\n availableClassIDs={classIDs}\n subregisters={subregisters}\n css={css`max-height: 50vh; overflow-y: auto;`} />\n <div\n key=\"query\"\n css={css`\n margin-top: 5px;\n padding: 0 10px 10px 10px;\n color: ${Colors.GRAY3};\n font-size: 90%;\n overflow-wrap: break-word;\n `}>\n Query used: <code>{criteriaGroupToQueryExpression(rootCriteria)}</code>\n </div>\n </>\n : null}\n </ControlGroup>\n );\n});\n\nexport default SearchQuery;\n"]}
@@ -62,7 +62,7 @@ function _validateFolderID(foldID) {
62
62
  return foldID !== undefined && (foldID === null || foldID.startsWith('by-item-class/') || foldID.startsWith('by-subregister/'));
63
63
  }
64
64
 
65
- const Browse = function ({
65
+ const Browse = (0, _react.memo)(function ({
66
66
  stateName,
67
67
  onOpenItem,
68
68
  className,
@@ -148,7 +148,7 @@ const Browse = function ({
148
148
  }
149
149
  }
150
150
  }, [focusedTabURI, dispatch]);
151
- const handleAdd = (0, _react.useCallback)(async function _handleAdd(classID, subregisterID) {
151
+ const createItem = (0, _react.useCallback)(async function _createItem(classID, subregisterID) {
152
152
  var _a;
153
153
 
154
154
  if (!updateObjects || !makeRandomID || !activeCRIsEditable || !activeCR) {
@@ -208,6 +208,8 @@ const Browse = function ({
208
208
  const handleExitFolder = (0, _react.useCallback)(() => dispatch({
209
209
  type: 'exit-folder'
210
210
  }), [dispatch]);
211
+ const handleAdd = (0, _react.useMemo)(() => !subregisters && activeCRIsEditable && performOperation ? clsID => performOperation('generating new item', createItem)(clsID) : undefined, [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);
212
+ const handleAddInSubregister = (0, _react.useMemo)(() => subregisters && activeCRIsEditable && performOperation ? (clsID, subregID) => performOperation('generating new item', createItem)(clsID, subregID) : undefined, [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);
211
213
 
212
214
  if (state.enteredFolderID !== null) {
213
215
  // If we are in a folder, show a tree with a single element
@@ -224,7 +226,7 @@ const Browse = function ({
224
226
  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,
225
227
  moreMenu: clsConfig ? (0, _react2.jsx)(ItemClassMenu, {
226
228
  cfg: itemClasses[classID],
227
- onCreate: !subregisters && activeCRIsEditable && performOperation ? () => performOperation('generating new item', handleAdd)(classID) : undefined
229
+ onCreate: handleAdd ? () => handleAdd(classID) : undefined
228
230
  }) : undefined
229
231
  };
230
232
  criteria = {
@@ -247,7 +249,7 @@ const Browse = function ({
247
249
  moreMenu: subregConfig ? (0, _react2.jsx)(SubregisterMenu, {
248
250
  cfg: subregConfig,
249
251
  itemClasses: itemClasses,
250
- onCreate: activeCRIsEditable && performOperation ? clsID => performOperation('generating new item', handleAdd)(clsID, subregisterID) : undefined
252
+ onCreate: handleAddInSubregister ? clsID => handleAddInSubregister(clsID, subregisterID) : undefined
251
253
  }) : undefined
252
254
  };
253
255
  criteria = {
@@ -326,7 +328,7 @@ const Browse = function ({
326
328
  },
327
329
  secondaryLabel: (0, _react2.jsx)(MoreMenu, null, (0, _react2.jsx)(ItemClassMenu, {
328
330
  cfg: classConfig,
329
- onCreate: !subregisters && activeCRIsEditable && performOperation ? () => performOperation('generating new item', handleAdd)(classID) : undefined
331
+ onCreate: handleAdd ? () => handleAdd(classID) : undefined
330
332
  }))
331
333
  })), ...(subregisters ? [{
332
334
  id: 'by-subregister',
@@ -351,7 +353,7 @@ const Browse = function ({
351
353
  secondaryLabel: (0, _react2.jsx)(MoreMenu, null, (0, _react2.jsx)(SubregisterMenu, {
352
354
  cfg: subregisterConfig,
353
355
  itemClasses: itemClasses,
354
- onCreate: activeCRIsEditable && performOperation ? clsID => performOperation('generating new item', handleAdd)(clsID, subregisterID) : undefined
356
+ onCreate: handleAddInSubregister ? clsID => handleAddInSubregister(clsID, subregisterID) : undefined
355
357
  }))
356
358
  }))] : [])];
357
359
 
@@ -395,9 +397,8 @@ const Browse = function ({
395
397
  contents: contents
396
398
  });
397
399
  }
398
- };
399
-
400
- const MoreMenu = function ({
400
+ });
401
+ const MoreMenu = (0, _react.memo)(function ({
401
402
  children
402
403
  }) {
403
404
  return (0, _react2.jsx)(_popover.Popover2, {
@@ -408,9 +409,8 @@ const MoreMenu = function ({
408
409
  small: true,
409
410
  minimal: true
410
411
  }));
411
- };
412
-
413
- const SubregisterMenu = function ({
412
+ });
413
+ const SubregisterMenu = (0, _react.memo)(function ({
414
414
  cfg,
415
415
  itemClasses,
416
416
  onCreate
@@ -428,9 +428,8 @@ const SubregisterMenu = function ({
428
428
  onCreate: onCreate ? () => onCreate(classID) : undefined
429
429
  }));
430
430
  }));
431
- };
432
-
433
- const ItemClassMenu = function ({
431
+ });
432
+ const ItemClassMenu = (0, _react.memo)(function ({
434
433
  cfg,
435
434
  onCreate
436
435
  }) {
@@ -449,8 +448,7 @@ const ItemClassMenu = function ({
449
448
  onClick: onCreate,
450
449
  icon: "plus"
451
450
  })) : null);
452
- };
453
-
451
+ });
454
452
  const SearchResultList = (0, _SearchResultList.default)(_ListItem.default, objPath => ({
455
453
  name: 'reg. item',
456
454
  iconProps: {
@@ -1 +1 @@
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, { useCallback, 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 initialState: State = {\n selectedFolderID: null,\n enteredFolderID: null,\n selectedItemPath: null,\n};\nfunction validateState(loadedValue: any): loadedValue is State {\n return (\n _validateFolderID(loadedValue.enteredFolderID) &&\n _validateFolderID(loadedValue.selectedFolderID) &&\n loadedValue.selectedItemPath !== undefined\n );\n};\nfunction _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\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 validateState,\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 initialState,\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, dispatch]);\n\n const handleAdd = useCallback(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 }, [activeCR, activeCRIsEditable, subregisters === undefined, spawnTab, updateObjects, makeRandomID]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n const handleDeselectItem = useCallback(\n (() => dispatch({ type: 'select-item', payload: { itemPath: null } })),\n [dispatch]);\n const handleOpenItem = useCallback(\n ((itemPath) =>\n (onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)))\n (itemPath)),\n [onOpenItem, spawnTab]);\n const handleExitFolder = useCallback(\n (() => dispatch({ type: 'exit-folder' })),\n [dispatch]);\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 <Tree\n css={css`flex: 0;`}\n // This click handler deselects any items in results, meaning.\n onNodeClick={handleDeselectItem}\n onNodeCollapse={handleExitFolder}\n onNodeDoubleClick={handleExitFolder}\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\n ? <MoreMenu>{folderInfo.moreMenu}</MoreMenu>\n : 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={handleSelectItem}\n onOpenItem={handleOpenItem}\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, { memo, useMemo, useCallback, 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 initialState: State = {\n selectedFolderID: null,\n enteredFolderID: null,\n selectedItemPath: null,\n};\nfunction validateState(loadedValue: any): loadedValue is State {\n return (\n _validateFolderID(loadedValue.enteredFolderID) &&\n _validateFolderID(loadedValue.selectedFolderID) &&\n loadedValue.selectedItemPath !== undefined\n );\n};\nfunction _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\nconst Browse: React.FC<{\n availableClassIDs?: string[]\n onOpenItem?: (itemPath: string) => void\n stateName?: string\n className?: string\n style?: React.CSSProperties\n}> =\nmemo(function ({ 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 validateState,\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 initialState,\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, dispatch]);\n\n const createItem = useCallback(async function _createItem(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 }, [activeCR, activeCRIsEditable, subregisters === undefined, spawnTab, updateObjects, makeRandomID]);\n\n const handleSelectItem = useCallback(\n (itemPath => dispatch({ type: 'select-item', payload: { itemPath }})),\n [dispatch]);\n const handleDeselectItem = useCallback(\n (() => dispatch({ type: 'select-item', payload: { itemPath: null } })),\n [dispatch]);\n const handleOpenItem = useCallback(\n ((itemPath) =>\n (onOpenItem ?? (itemPath => spawnTab(`${Protocols.ITEM_DETAILS}:${itemPath}`)))\n (itemPath)),\n [onOpenItem, spawnTab]);\n const handleExitFolder = useCallback(\n (() => dispatch({ type: 'exit-folder' })),\n [dispatch]);\n\n const handleAdd: undefined | ((clsID: string) => Promise<void>) = useMemo((() =>\n !subregisters && activeCRIsEditable && performOperation\n ? (clsID) => performOperation('generating new item', createItem)(clsID)\n : undefined\n ), [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);\n\n const handleAddInSubregister: undefined | ((clsID: string, subregID: string) => Promise<void>) = useMemo((() =>\n subregisters && activeCRIsEditable && performOperation\n ? (clsID, subregID) => performOperation('generating new item', createItem)(clsID, subregID)\n : undefined\n ), [createItem, subregisters === undefined, activeCRIsEditable, performOperation]);\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={handleAdd ? () => handleAdd(classID) : 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={handleAddInSubregister\n ? (clsID) => handleAddInSubregister(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 <Tree\n css={css`flex: 0;`}\n // This click handler deselects any items in results, meaning.\n onNodeClick={handleDeselectItem}\n onNodeCollapse={handleExitFolder}\n onNodeDoubleClick={handleExitFolder}\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\n ? <MoreMenu>{folderInfo.moreMenu}</MoreMenu>\n : 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={handleSelectItem}\n onOpenItem={handleOpenItem}\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={handleAdd ? () => handleAdd(classID) : 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={handleAddInSubregister\n ? (clsID) => handleAddInSubregister(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>> = memo(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}> = memo(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}> = memo(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"]}
@@ -18,7 +18,7 @@ var _itemPathUtils = require("../itemPathUtils");
18
18
  /** @jsxFrag React.Fragment */
19
19
 
20
20
  /** Register item list view. */
21
- const ListItem = function ({
21
+ const ListItem = (0, _react.memo)(function ({
22
22
  objectData,
23
23
  objectPath
24
24
  }) {
@@ -37,7 +37,6 @@ const ListItem = function ({
37
37
  css: (0, _react2.css)`opacity: .4`
38
38
  }, "(missing item data at ", objectPath, ")");
39
39
  return itemView;
40
- };
41
-
40
+ });
42
41
  var _default = ListItem;
43
42
  exports.default = _default;
@@ -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,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
+ {"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/views/sidebar/ListItem.tsx"],"names":[],"mappings":"AAAA,eAAe;AACf,8BAA8B;AAE9B,OAAc,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAChD,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,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE;IACvC,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,CAAC,CAAC;AAGH,eAAe,QAAQ,CAAC","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport React, { memo, 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 }> =\nmemo(function ({ 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"]}
@@ -49,8 +49,7 @@ const initialState = {
49
49
  quickSubstringQuery: '',
50
50
  selectedItemPath: null
51
51
  };
52
-
53
- const Search = function ({
52
+ const Search = (0, _react.memo)(function ({
54
53
  implicitCriteria,
55
54
  availableClassIDs,
56
55
  stateName,
@@ -170,8 +169,7 @@ const Search = function ({
170
169
  onSelectItem: handleSelectItem,
171
170
  onOpenItem: handleOpenItem
172
171
  })));
173
- };
174
-
172
+ });
175
173
  const SearchResultList = (0, _SearchResultList.default)(_ListItem.default, objPath => ({
176
174
  name: 'reg. item',
177
175
  iconProps: {
@@ -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":"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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, { 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> = 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"]}
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"]}