@riboseinc/paneron-registry-kit 2.1.5 → 2.2.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@riboseinc/paneron-registry-kit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "Ribose Inc. <open.source@ribose.com>",
|
|
6
6
|
"scripts": {
|
|
@@ -28,8 +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.
|
|
32
|
-
"@types/node": "^16.11.7",
|
|
31
|
+
"@riboseinc/paneron-extension-kit": "2.2.0",
|
|
33
32
|
"@types/react": "17.0.53",
|
|
34
33
|
"@types/react-dom": "^17.0.2",
|
|
35
34
|
"@types/react-helmet": "^6.1.2",
|
package/types/views.d.ts
CHANGED
|
@@ -138,8 +138,12 @@ export interface GenericRelatedItemViewProps {
|
|
|
138
138
|
*/
|
|
139
139
|
onJump?: () => void;
|
|
140
140
|
className?: string;
|
|
141
|
+
/**
|
|
142
|
+
* Determines which item classes can be selected in the search dialog.
|
|
143
|
+
* If undefined, *any* class can be chosen.
|
|
144
|
+
* If empty list, no class can be chosen (weird).
|
|
145
|
+
*/
|
|
141
146
|
availableClassIDs?: string[];
|
|
142
|
-
availableSubregisterIDs?: string[];
|
|
143
147
|
itemSorter?: ItemClassConfiguration<any>["itemSorter"];
|
|
144
148
|
/** Called to auto-create an item (can’t auto-create if not provided) */
|
|
145
149
|
onCreateNew?: () => Promise<InternalItemReference>;
|
|
@@ -147,9 +151,11 @@ export interface GenericRelatedItemViewProps {
|
|
|
147
151
|
onClear?: () => void;
|
|
148
152
|
/** Called when a new item is selected (can’t change if not provided) */
|
|
149
153
|
onChange?: (newRef: InternalItemReference) => void;
|
|
150
|
-
/**
|
|
154
|
+
/** @deprecated subregisters no longer supported. */
|
|
155
|
+
availableSubregisterIDs?: string[];
|
|
156
|
+
/** @deprecated */
|
|
151
157
|
useRegisterItemData?: any;
|
|
152
|
-
/**
|
|
158
|
+
/** @deprecated */
|
|
153
159
|
getRelatedItemClassConfiguration?: any;
|
|
154
160
|
}
|
|
155
161
|
export declare type ItemEditView<P extends Payload> = React.FC<ItemEditViewProps<P>>;
|
package/types/views.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/types/views.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\nimport type { ButtonProps, MenuItemProps } from '@blueprintjs/core';\nimport type { ObjectDatasetRequest, ObjectDatasetResponse, ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport type { InternalItemReference, Payload, RegisterItem, RegisterItemClass } from './item';\nimport type { CriteriaGroup } from '../views/FilterCriteria/models';\n\n\n// Hooks\n\n/**\n * Mostly a wrapper around useObjectData, but coerces value type\n * (TODO: validate!) and takes into account change request from any\n * wrapping change request context. If a change request is present,\n * will substitute proposed item data unless `ignoreActiveCR` is set.\n *\n * NOTE: Despite the name, returns the entire RegisterItem,\n * not just the `.data` property with item payload.\n */\nexport type RegisterItemDataHook<P extends Payload = Payload> =\n (opts: { itemPaths: string[], ignoreActiveCR?: true }) => ValueHook<Record<string, RegisterItem<P> | null>>;\n\n\n// Extension configuration\n\n// TODO: Obsolete?\n// export interface ExtensionContext {\n// getRelatedItemClassConfiguration: (classID: string) => RelatedItemClassConfiguration\n// useRegisterItemData: RegisterItemDataHook\n// onJump?: () => void\n// }\n\nexport interface RegisterConfiguration\n<Items extends ItemClassConfigurationSet = Record<string, ItemClassConfiguration<any>>> {\n /**\n * Configuration for all items in this register.\n * This includes items in subregisters.\n */\n itemClassConfiguration: Items\n\n /**\n * Default expression used to sort an item.\n * Passed to useFilteredIndex().\n */\n keyExpression?: string\n\n /** Subregister information. */\n subregisters?: Subregisters<Items>\n}\n\nexport type Subregisters\n<Items extends ItemClassConfigurationSet = Record<string, ItemClassConfiguration<any>>> = {\n [subregisterID: string]: {\n title: string\n\n /** Names of item classes that go in this subregister. */\n itemClasses: (keyof Items)[]\n }\n};\n\nexport type ItemClassConfigurationSet = {\n [itemClassID: string]: ItemClassConfiguration<any>\n};\n\n\n\nexport interface ExportFormatConfiguration<P extends Payload> {\n /** The name of the export format. */\n label: string\n\n /**\n * Trailing part of the filename to save export as;\n * must include at least extension (with separator),\n * must not include any path prefix.\n */\n filenameExtension: string\n\n /**\n * The function that takes register item data and some helper functions\n * and is expected to return a blob.\n */\n exportItem: (\n itemData: RegisterItem<P>,\n opts: {\n getObjectData: (opts: ObjectDatasetRequest) => Promise<ObjectDatasetResponse>,\n getBlob: (val: string) => Promise<Uint8Array>,\n logger?: { log: Console[\"log\"], error: Console[\"error\"], debug: Console[\"debug\"] },\n },\n ) => Promise<Uint8Array>\n}\n\n\nexport interface ItemClassConfiguration<P extends Payload/*, F extends Field*/> {\n meta: RegisterItemClass\n\n itemCanBeSuperseded?: boolean\n // If false, items of this class cannot be superseded, only retired.\n // Default is true.\n\n defaults?: RegistryItemPayloadDefaults<P>\n // Used to pre-populate item data e.g. when a new item is created.\n\n validatePayload?: (item: P) => Promise<boolean>\n sanitizePayload?: (item: P) => Promise<P>\n\n // XXX: Confirm if obsolete and remove\n itemSorter?: (a: P, b: P) => number\n\n /**\n * Expression used to sort an item of this class.\n * Passed to useFilteredIndex().\n */\n keyExpression?: string\n\n exportFormats?: ExportFormatConfiguration<P>[]\n\n views: {\n listItemView: ItemListView<P>\n editView: ItemEditView<P>\n detailView?: ItemDetailView<P>\n }\n}\n\n\nexport interface RegistryViewProps\n<Items extends ItemClassConfigurationSet = Record<string, ItemClassConfiguration<any>>>\nextends RegisterConfiguration<Items> {\n /**\n * When search is initially opened, have this query pre-defined.\n * Not very useful since there are also preset searches in the browser now.\n */\n // TODO: Obsoluete?\n defaultSearchCriteria?: CriteriaGroup\n\n customViews?: CustomViewConfiguration[]\n}\n\nexport interface CustomViewConfiguration {\n id: string\n label: string\n description: string\n view: React.FC<{\n /** View can support optional path for custom state/inner navigation (provisional). */\n path: string\n }>\n icon?: JSX.Element\n}\n\n\n// Item views\n\nexport interface ItemAction {\n getButtonProps:\n (item: RegisterItem<any>, itemClass: ItemClassConfiguration<any>, subregisterID?: string) =>\n ButtonProps | MenuItemProps\n}\n\nexport type RegistryView = React.FC<RegistryViewProps>\n\ntype RegistryItemPayloadDefaults<P extends Payload> =\n Partial<Omit<P, 'id'>>;\n\n/**\n * A small part of item class configuration,\n * useful e.g. for formatting related items.\n */\nexport type RelatedItemClassConfiguration = {\n title: string\n itemView: ItemListView<any>\n}\n\n\nexport interface RegistryItemViewProps<P extends Payload> {\n /**\n * Item reference.\n * Glossarist, for example, uses it to determine language subregister and set appropriate writing direction.\n */\n itemRef: Omit<InternalItemReference, 'itemID'> & { itemID?: InternalItemReference['itemID'] }\n\n /** Item data (payload). */\n itemData: P\n\n className?: string\n //subregisterID?: string\n\n /** Deprecated */\n useRegisterItemData?: any\n /** Deprecated */\n getRelatedItemClassConfiguration?: any\n}\n\nexport interface GenericRelatedItemViewProps {\n /** Currently selected item’s ref. */\n itemRef?: InternalItemReference\n\n /**\n * By default, clicking the item will spawn a tab via TabbedWorkspace context.\n * This prop can customize that behavior.\n */\n onJump?: () => void\n\n className?: string\n
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/types/views.ts"],"names":[],"mappings":"","sourcesContent":["import type React from 'react';\nimport type { ButtonProps, MenuItemProps } from '@blueprintjs/core';\nimport type { ObjectDatasetRequest, ObjectDatasetResponse, ValueHook } from '@riboseinc/paneron-extension-kit/types';\nimport type { InternalItemReference, Payload, RegisterItem, RegisterItemClass } from './item';\nimport type { CriteriaGroup } from '../views/FilterCriteria/models';\n\n\n// Hooks\n\n/**\n * Mostly a wrapper around useObjectData, but coerces value type\n * (TODO: validate!) and takes into account change request from any\n * wrapping change request context. If a change request is present,\n * will substitute proposed item data unless `ignoreActiveCR` is set.\n *\n * NOTE: Despite the name, returns the entire RegisterItem,\n * not just the `.data` property with item payload.\n */\nexport type RegisterItemDataHook<P extends Payload = Payload> =\n (opts: { itemPaths: string[], ignoreActiveCR?: true }) => ValueHook<Record<string, RegisterItem<P> | null>>;\n\n\n// Extension configuration\n\n// TODO: Obsolete?\n// export interface ExtensionContext {\n// getRelatedItemClassConfiguration: (classID: string) => RelatedItemClassConfiguration\n// useRegisterItemData: RegisterItemDataHook\n// onJump?: () => void\n// }\n\nexport interface RegisterConfiguration\n<Items extends ItemClassConfigurationSet = Record<string, ItemClassConfiguration<any>>> {\n /**\n * Configuration for all items in this register.\n * This includes items in subregisters.\n */\n itemClassConfiguration: Items\n\n /**\n * Default expression used to sort an item.\n * Passed to useFilteredIndex().\n */\n keyExpression?: string\n\n /** Subregister information. */\n subregisters?: Subregisters<Items>\n}\n\nexport type Subregisters\n<Items extends ItemClassConfigurationSet = Record<string, ItemClassConfiguration<any>>> = {\n [subregisterID: string]: {\n title: string\n\n /** Names of item classes that go in this subregister. */\n itemClasses: (keyof Items)[]\n }\n};\n\nexport type ItemClassConfigurationSet = {\n [itemClassID: string]: ItemClassConfiguration<any>\n};\n\n\n\nexport interface ExportFormatConfiguration<P extends Payload> {\n /** The name of the export format. */\n label: string\n\n /**\n * Trailing part of the filename to save export as;\n * must include at least extension (with separator),\n * must not include any path prefix.\n */\n filenameExtension: string\n\n /**\n * The function that takes register item data and some helper functions\n * and is expected to return a blob.\n */\n exportItem: (\n itemData: RegisterItem<P>,\n opts: {\n getObjectData: (opts: ObjectDatasetRequest) => Promise<ObjectDatasetResponse>,\n getBlob: (val: string) => Promise<Uint8Array>,\n logger?: { log: Console[\"log\"], error: Console[\"error\"], debug: Console[\"debug\"] },\n },\n ) => Promise<Uint8Array>\n}\n\n\nexport interface ItemClassConfiguration<P extends Payload/*, F extends Field*/> {\n meta: RegisterItemClass\n\n itemCanBeSuperseded?: boolean\n // If false, items of this class cannot be superseded, only retired.\n // Default is true.\n\n defaults?: RegistryItemPayloadDefaults<P>\n // Used to pre-populate item data e.g. when a new item is created.\n\n validatePayload?: (item: P) => Promise<boolean>\n sanitizePayload?: (item: P) => Promise<P>\n\n // XXX: Confirm if obsolete and remove\n itemSorter?: (a: P, b: P) => number\n\n /**\n * Expression used to sort an item of this class.\n * Passed to useFilteredIndex().\n */\n keyExpression?: string\n\n exportFormats?: ExportFormatConfiguration<P>[]\n\n views: {\n listItemView: ItemListView<P>\n editView: ItemEditView<P>\n detailView?: ItemDetailView<P>\n }\n}\n\n\nexport interface RegistryViewProps\n<Items extends ItemClassConfigurationSet = Record<string, ItemClassConfiguration<any>>>\nextends RegisterConfiguration<Items> {\n /**\n * When search is initially opened, have this query pre-defined.\n * Not very useful since there are also preset searches in the browser now.\n */\n // TODO: Obsoluete?\n defaultSearchCriteria?: CriteriaGroup\n\n customViews?: CustomViewConfiguration[]\n}\n\nexport interface CustomViewConfiguration {\n id: string\n label: string\n description: string\n view: React.FC<{\n /** View can support optional path for custom state/inner navigation (provisional). */\n path: string\n }>\n icon?: JSX.Element\n}\n\n\n// Item views\n\nexport interface ItemAction {\n getButtonProps:\n (item: RegisterItem<any>, itemClass: ItemClassConfiguration<any>, subregisterID?: string) =>\n ButtonProps | MenuItemProps\n}\n\nexport type RegistryView = React.FC<RegistryViewProps>\n\ntype RegistryItemPayloadDefaults<P extends Payload> =\n Partial<Omit<P, 'id'>>;\n\n/**\n * A small part of item class configuration,\n * useful e.g. for formatting related items.\n */\nexport type RelatedItemClassConfiguration = {\n title: string\n itemView: ItemListView<any>\n}\n\n\nexport interface RegistryItemViewProps<P extends Payload> {\n /**\n * Item reference.\n * Glossarist, for example, uses it to determine language subregister and set appropriate writing direction.\n */\n itemRef: Omit<InternalItemReference, 'itemID'> & { itemID?: InternalItemReference['itemID'] }\n\n /** Item data (payload). */\n itemData: P\n\n className?: string\n //subregisterID?: string\n\n /** Deprecated */\n useRegisterItemData?: any\n /** Deprecated */\n getRelatedItemClassConfiguration?: any\n}\n\nexport interface GenericRelatedItemViewProps {\n /** Currently selected item’s ref. */\n itemRef?: InternalItemReference\n\n /**\n * By default, clicking the item will spawn a tab via TabbedWorkspace context.\n * This prop can customize that behavior.\n */\n onJump?: () => void\n\n className?: string\n\n /**\n * Determines which item classes can be selected in the search dialog.\n * If undefined, *any* class can be chosen.\n * If empty list, no class can be chosen (weird).\n */\n availableClassIDs?: string[]\n\n // XXX: Check if obsolete, remove if unused\n itemSorter?: ItemClassConfiguration<any>[\"itemSorter\"]\n\n /** Called to auto-create an item (can’t auto-create if not provided) */\n onCreateNew?: () => Promise<InternalItemReference>\n\n /** Called when current item is cleared (can’t clear if not provided) */\n onClear?: () => void\n\n /** Called when a new item is selected (can’t change if not provided) */\n onChange?: (newRef: InternalItemReference) => void\n\n /** @deprecated subregisters no longer supported. */\n availableSubregisterIDs?: string[]\n\n /** @deprecated */\n useRegisterItemData?: any\n //useRegisterItemData: RegisterItemDataHook\n\n /** @deprecated */\n getRelatedItemClassConfiguration?: any\n //getRelatedItemClassConfiguration: ExtensionContext[\"getRelatedItemClassConfiguration\"]\n}\n\n\nexport type ItemEditView<P extends Payload> = React.FC<ItemEditViewProps<P>>;\n\nexport interface ItemEditViewProps<P extends Payload> extends RegistryItemViewProps<P> {\n onChange?: (newData: P) => void\n onCreateRelatedItem?:\n (classID: string, subregisterID?: string) => Promise<InternalItemReference>\n}\n\nexport interface ItemDetailViewProps<P extends Payload> extends RegistryItemViewProps<P> {\n //useRegisterItemData: RegisterItemDataHook\n}\n\nexport type ItemDetailView<P extends Payload> = React.FC<ItemDetailViewProps<P>>;\n\nexport interface ItemListViewProps<P extends Payload> extends RegistryItemViewProps<P> {\n}\n\nexport type ItemListView<P extends Payload> = React.FC<ItemListViewProps<P>>;\n\nexport type LazyItemView = React.FC<{ itemID: string }>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CRITERIA_CONFIGURATION.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/CRITERIA_CONFIGURATION.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport type { OptionProps } from '@blueprintjs/core';\nimport { Select, TextInput } from '@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView';\nimport type { CriteriaConfiguration, CriterionConfiguration } from './models';\nimport { SUBREGISTER_PATH_PREFIX } from './index';\n\n\nexport const ITEM_CLASS: CriterionConfiguration<{ classID?: string }> = {\n label: \"item class is\",\n icon: 'cube',\n toQuery: ({ classID }, { subregisters }) => `objPath.indexOf(\"/${classID}/\") >= ${subregisters ? SUBREGISTER_PATH_PREFIX.length - 1 : 0}`,\n fromQuery: (query) => ({\n classID: query.split('/')[1],\n }),\n toSummary: ({ classID }, { itemClasses }) => {\n if (classID) {\n return itemClasses[classID]?.meta.title ?? classID;\n } else {\n return \"(N/A)\";\n }\n },\n widget: ({ data, onChange, itemClasses, availableClassIDs, className, style }) => {\n const itemClassChoices: OptionProps[] = [\n ...Object.entries(itemClasses).\n filter(([clsID, ]) => availableClassIDs.indexOf(clsID) >= 0).\n map(([classID, classData]) => {\n return { value: classID, label: classData?.meta?.title ?? \"Unknown class\" };\n }),\n { value: '', label: \"(not selected)\" },\n ];\n return (\n <Select\n className={className}\n style={style}\n fill\n options={itemClassChoices}\n value={data.classID ?? ''}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ classID: evt.currentTarget.value })\n : undefined} />\n );\n },\n};\n\n\nexport const SUBREGISTER: CriterionConfiguration<{ subregisterID?: string }> = {\n label: \"is in subregister\",\n icon: 'folder-open',\n isEnabled: ({ subregisters }) => subregisters !== undefined,\n toQuery: ({ subregisterID }, { subregisters }) => subregisters !== undefined && subregisterID?.trim()\n ? `objPath.indexOf(\"/subregisters/${subregisterID}/\") === 0`\n : 'true',\n fromQuery: (query) => ({\n subregisterID: query.split('/')[2],\n }),\n toSummary: ({ subregisterID }, { subregisters }) => {\n if (subregisters && subregisterID) {\n return subregisters[subregisterID].title;\n } else {\n return \"(N/A)\";\n }\n },\n widget: ({ data, onChange, subregisters, className, style }) => {\n const subregisterChoices: OptionProps[] = [\n ...Object.entries(subregisters ?? {}).\n map(([subregisterID, subregisterInfo]) => {\n return { value: subregisterID, label: subregisterInfo.title };\n }),\n { value: '', label: \"(not selected)\" },\n ];\n return (\n <Select\n className={className}\n style={style}\n fill\n options={subregisterChoices}\n value={data.subregisterID ?? ''}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ subregisterID: evt.currentTarget.value })\n : undefined} />\n );\n },\n};\n\n\nexport const RAW_SUBSTRING: CriterionConfiguration<{ substring?: string }> = {\n label: \"raw data contains\",\n icon: 'search-text',\n toQuery: ({ substring }) =>\n substring?.trim()\n ? `JSON.stringify(obj.data ?? {}).toLowerCase().indexOf(\"${substring.toLowerCase().replace(/\"/g, \"\\\\\\\"\")}\") >= 0`\n : `true`,\n fromQuery: (query) => ({\n substring: (query.\n split('JSON.stringify(obj.data ?? {}).toLowerCase().indexOf(\"')[1]?.\n split('\") >= 0')[0] ?? '').replace(/\\\\\"/g, '\"'),\n }),\n toSummary: ({ substring }) => {\n if (substring) {\n return substring.length > 20 ? `${substring.slice(0, 20)}…` : substring;\n } else {\n return 'N/A';\n }\n },\n widget: ({ data, onChange, className, style }) => {\n return <TextInput\n className={className}\n style={style}\n value={data.substring ?? ''}\n onChange={onChange ? substring => onChange!({ substring }) : undefined}\n />;\n },\n}\n\n\nexport const CUSTOM_CONDITION: CriterionConfiguration<{ customExpression?: string; }> = {\n label: \"condition is met\",\n icon: 'code',\n toQuery: ({ customExpression }) => customExpression ?? 'true',\n fromQuery: (query) => ({\n customExpression: query,\n }),\n toSummary: () => \"(custom test expr.)\",\n widget: ({ data, onChange, className }) => {\n return (\n <TextInput\n className={className}\n value={data.customExpression ?? 'true'}\n placeholder=\"Enter a valid query expression…\"\n onChange={onChange\n ? (customExpression) => onChange!({ customExpression })\n : undefined} />\n );\n },\n}\n\n\nexport const CRITERIA_CONFIGURATION: CriteriaConfiguration = {\n 'item-class': ITEM_CLASS,\n 'subregister': SUBREGISTER,\n 'raw-substring': RAW_SUBSTRING,\n 'custom': CUSTOM_CONDITION,\n};\n\n\nexport default CRITERIA_CONFIGURATION;\n"]}
|
|
1
|
+
{"version":3,"file":"CRITERIA_CONFIGURATION.js","sourceRoot":"","sources":["../../../src/views/FilterCriteria/CRITERIA_CONFIGURATION.tsx"],"names":[],"mappings":"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","sourcesContent":["/** @jsx jsx */\n/** @jsxFrag React.Fragment */\n\nimport { jsx } from '@emotion/react';\nimport type { OptionProps } from '@blueprintjs/core';\nimport { Select, TextInput } from '@riboseinc/paneron-extension-kit/widgets/Sidebar/PropertyView';\nimport type { CriteriaConfiguration, CriterionConfiguration } from './models';\nimport { SUBREGISTER_PATH_PREFIX } from './index';\n\n\nexport const ITEM_CLASS: CriterionConfiguration<{ classID?: string }> = {\n label: \"item class is\",\n icon: 'cube',\n toQuery: ({ classID }, { subregisters }) => `objPath.indexOf(\"/${classID}/\") >= ${subregisters ? SUBREGISTER_PATH_PREFIX.length - 1 : 0}`,\n fromQuery: (query) => ({\n classID: query.split('/')[1],\n }),\n toSummary: ({ classID }, { itemClasses }) => {\n if (classID) {\n return itemClasses[classID]?.meta.title ?? classID;\n } else {\n return \"(N/A)\";\n }\n },\n widget: ({ data, onChange, itemClasses, availableClassIDs, className, style }) => {\n const itemClassChoices: OptionProps[] = [\n ...Object.entries(itemClasses).\n filter(([clsID, ]) => availableClassIDs.indexOf(clsID) >= 0).\n map(([classID, classData]) => {\n return {\n value: classID,\n label: classData?.meta?.title ?? \"Unknown class\",\n };\n }),\n { value: '', label: \"(not selected)\" },\n ];\n return (\n <Select\n className={className}\n style={style}\n fill\n options={itemClassChoices}\n value={data.classID ?? ''}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ classID: evt.currentTarget.value })\n : undefined}\n />\n );\n },\n};\n\n\nexport const SUBREGISTER: CriterionConfiguration<{ subregisterID?: string }> = {\n label: \"is in subregister\",\n icon: 'folder-open',\n isEnabled: ({ subregisters }) => subregisters !== undefined,\n toQuery: ({ subregisterID }, { subregisters }) => subregisters !== undefined && subregisterID?.trim()\n ? `objPath.indexOf(\"/subregisters/${subregisterID}/\") === 0`\n : 'true',\n fromQuery: (query) => ({\n subregisterID: query.split('/')[2],\n }),\n toSummary: ({ subregisterID }, { subregisters }) => {\n if (subregisters && subregisterID) {\n return subregisters[subregisterID].title;\n } else {\n return \"(N/A)\";\n }\n },\n widget: ({ data, onChange, subregisters, className, style }) => {\n const subregisterChoices: OptionProps[] = [\n ...Object.entries(subregisters ?? {}).\n map(([subregisterID, subregisterInfo]) => {\n return { value: subregisterID, label: subregisterInfo.title };\n }),\n { value: '', label: \"(not selected)\" },\n ];\n return (\n <Select\n className={className}\n style={style}\n fill\n options={subregisterChoices}\n value={data.subregisterID ?? ''}\n disabled={!onChange}\n onChange={onChange\n ? (evt) => onChange!({ subregisterID: evt.currentTarget.value })\n : undefined}\n />\n );\n },\n};\n\n\nexport const RAW_SUBSTRING: CriterionConfiguration<{ substring?: string }> = {\n label: \"raw data contains\",\n icon: 'search-text',\n toQuery: ({ substring }) =>\n substring?.trim()\n ? `JSON.stringify(obj.data ?? {}).toLowerCase().indexOf(\"${substring.toLowerCase().replace(/\"/g, \"\\\\\\\"\")}\") >= 0`\n : `true`,\n fromQuery: (query) => ({\n substring: (query.\n split('JSON.stringify(obj.data ?? {}).toLowerCase().indexOf(\"')[1]?.\n split('\") >= 0')[0] ?? '').replace(/\\\\\"/g, '\"'),\n }),\n toSummary: ({ substring }) => {\n if (substring) {\n return substring.length > 20 ? `${substring.slice(0, 20)}…` : substring;\n } else {\n return 'N/A';\n }\n },\n widget: ({ data, onChange, className, style }) => {\n return <TextInput\n className={className}\n style={style}\n value={data.substring ?? ''}\n onChange={onChange ? substring => onChange!({ substring }) : undefined}\n />;\n },\n}\n\n\nexport const CUSTOM_CONDITION: CriterionConfiguration<{ customExpression?: string; }> = {\n label: \"condition is met\",\n icon: 'code',\n toQuery: ({ customExpression }) => customExpression ?? 'true',\n fromQuery: (query) => ({\n customExpression: query,\n }),\n toSummary: () => \"(custom test expr.)\",\n widget: ({ data, onChange, className }) => {\n return (\n <TextInput\n className={className}\n value={data.customExpression ?? 'true'}\n placeholder=\"Enter a valid query expression…\"\n onChange={onChange\n ? (customExpression) => onChange!({ customExpression })\n : undefined}\n />\n );\n },\n}\n\n\nexport const CRITERIA_CONFIGURATION: CriteriaConfiguration = {\n 'item-class': ITEM_CLASS,\n 'subregister': SUBREGISTER,\n 'raw-substring': RAW_SUBSTRING,\n 'custom': CUSTOM_CONDITION,\n};\n\n\nexport default CRITERIA_CONFIGURATION;\n"]}
|