@eccenca/gui-elements 23.2.0-rc.0 → 23.2.0-rc.1
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/CHANGELOG.md +28 -3
- package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js +24 -20
- package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
- package/dist/cjs/components/AutocompleteField/AutoCompleteField.js +59 -50
- package/dist/cjs/components/AutocompleteField/AutoCompleteField.js.map +1 -1
- package/dist/cjs/components/AutocompleteField/autoCompleteFieldUtils.js +3 -3
- package/dist/cjs/components/AutocompleteField/autoCompleteFieldUtils.js.map +1 -1
- package/dist/cjs/components/Breadcrumb/BreadcrumbItem.js +9 -6
- package/dist/cjs/components/Breadcrumb/BreadcrumbItem.js.map +1 -1
- package/dist/cjs/components/CodeAutocompleteField/CodeAutocompleteField.js +33 -0
- package/dist/cjs/components/CodeAutocompleteField/CodeAutocompleteField.js.map +1 -0
- package/dist/cjs/components/CodeAutocompleteField/index.js +14 -0
- package/dist/cjs/components/CodeAutocompleteField/index.js.map +1 -0
- package/dist/cjs/components/Depiction/Depiction.js +13 -13
- package/dist/cjs/components/Depiction/Depiction.js.map +1 -1
- package/dist/cjs/components/Icon/IconButton.js +9 -3
- package/dist/cjs/components/Icon/IconButton.js.map +1 -1
- package/dist/cjs/components/Icon/canonicalIconNames.js +2 -0
- package/dist/cjs/components/Icon/canonicalIconNames.js.map +1 -1
- package/dist/cjs/components/MultiSelect/MultiSelect.js +45 -17
- package/dist/cjs/components/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/cjs/components/MultiSuggestField/MultiSuggestField.js +33 -0
- package/dist/cjs/components/MultiSuggestField/MultiSuggestField.js.map +1 -0
- package/dist/cjs/components/OverviewItem/OverviewItem.js +8 -10
- package/dist/cjs/components/OverviewItem/OverviewItem.js.map +1 -1
- package/dist/cjs/components/PropertyValuePair/PropertyName.js +4 -3
- package/dist/cjs/components/PropertyValuePair/PropertyName.js.map +1 -1
- package/dist/cjs/components/Select/Select.js +17 -3
- package/dist/cjs/components/Select/Select.js.map +1 -1
- package/dist/cjs/components/SuggestField/SuggestField.js +39 -0
- package/dist/cjs/components/SuggestField/SuggestField.js.map +1 -0
- package/dist/cjs/components/SuggestField/index.js +19 -0
- package/dist/cjs/components/SuggestField/index.js.map +1 -0
- package/dist/cjs/components/index.js +3 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/extensions/react-flow/nodes/NodeContent.js +54 -41
- package/dist/cjs/extensions/react-flow/nodes/NodeContent.js.map +1 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/components/AutoSuggestion/AutoSuggestion.js +23 -18
- package/dist/esm/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
- package/dist/esm/components/AutocompleteField/AutoCompleteField.js +68 -59
- package/dist/esm/components/AutocompleteField/AutoCompleteField.js.map +1 -1
- package/dist/esm/components/AutocompleteField/autoCompleteFieldUtils.js +3 -3
- package/dist/esm/components/AutocompleteField/autoCompleteFieldUtils.js.map +1 -1
- package/dist/esm/components/Breadcrumb/BreadcrumbItem.js +9 -6
- package/dist/esm/components/Breadcrumb/BreadcrumbItem.js.map +1 -1
- package/dist/esm/components/CodeAutocompleteField/CodeAutocompleteField.js +37 -0
- package/dist/esm/components/CodeAutocompleteField/CodeAutocompleteField.js.map +1 -0
- package/dist/esm/components/CodeAutocompleteField/index.js +2 -0
- package/dist/esm/components/CodeAutocompleteField/index.js.map +1 -0
- package/dist/esm/components/Depiction/Depiction.js +12 -12
- package/dist/esm/components/Depiction/Depiction.js.map +1 -1
- package/dist/esm/components/Icon/IconButton.js +10 -4
- package/dist/esm/components/Icon/IconButton.js.map +1 -1
- package/dist/esm/components/Icon/canonicalIconNames.js +2 -0
- package/dist/esm/components/Icon/canonicalIconNames.js.map +1 -1
- package/dist/esm/components/MultiSelect/MultiSelect.js +52 -22
- package/dist/esm/components/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/esm/components/MultiSuggestField/MultiSuggestField.js +37 -0
- package/dist/esm/components/MultiSuggestField/MultiSuggestField.js.map +1 -0
- package/dist/esm/components/OverviewItem/OverviewItem.js +8 -10
- package/dist/esm/components/OverviewItem/OverviewItem.js.map +1 -1
- package/dist/esm/components/PropertyValuePair/PropertyName.js +4 -3
- package/dist/esm/components/PropertyValuePair/PropertyName.js.map +1 -1
- package/dist/esm/components/Select/Select.js +18 -4
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/SuggestField/SuggestField.js +43 -0
- package/dist/esm/components/SuggestField/SuggestField.js.map +1 -0
- package/dist/esm/components/SuggestField/index.js +6 -0
- package/dist/esm/components/SuggestField/index.js.map +1 -0
- package/dist/esm/components/index.js +3 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/extensions/react-flow/nodes/NodeContent.js +51 -39
- package/dist/esm/extensions/react-flow/nodes/NodeContent.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/types/components/AutoSuggestion/AutoSuggestion.d.ts +35 -4
- package/dist/types/components/AutocompleteField/AutoCompleteField.d.ts +23 -6
- package/dist/types/components/AutocompleteField/autoCompleteFieldUtils.d.ts +3 -3
- package/dist/types/components/AutocompleteField/index.d.ts +1 -1
- package/dist/types/components/AutocompleteField/interfaces.d.ts +1 -1
- package/dist/types/components/CodeAutocompleteField/CodeAutocompleteField.d.ts +10 -0
- package/dist/types/components/CodeAutocompleteField/index.d.ts +1 -0
- package/dist/types/components/Icon/IconButton.d.ts +2 -2
- package/dist/types/components/Icon/canonicalIconNames.d.ts +1 -1
- package/dist/types/components/MultiSelect/MultiSelect.d.ts +20 -2
- package/dist/types/components/MultiSuggestField/MultiSuggestField.d.ts +10 -0
- package/dist/types/components/PropertyValuePair/PropertyName.d.ts +5 -1
- package/dist/types/components/Select/Select.d.ts +28 -9
- package/dist/types/components/SuggestField/SuggestField.d.ts +16 -0
- package/dist/types/components/SuggestField/index.d.ts +5 -0
- package/dist/types/components/index.d.ts +3 -0
- package/dist/types/extensions/react-flow/nodes/NodeContent.d.ts +7 -7
- package/dist/types/index.d.ts +2 -1
- package/package.json +1 -1
- package/src/components/AutoSuggestion/AutoSuggestion.stories.tsx +14 -0
- package/src/components/AutoSuggestion/AutoSuggestion.tsx +280 -221
- package/src/components/AutocompleteField/AutoCompleteField.stories.tsx +14 -0
- package/src/components/AutocompleteField/AutoCompleteField.tsx +157 -121
- package/src/components/AutocompleteField/autoCompleteFieldUtils.tsx +10 -16
- package/src/components/AutocompleteField/interfaces.ts +5 -6
- package/src/components/Breadcrumb/BreadcrumbItem.tsx +19 -18
- package/src/components/Breadcrumb/breadcrumb.scss +18 -16
- package/src/components/Breadcrumb/stories/BreadcrumbList.stories.tsx +18 -15
- package/src/components/CodeAutocompleteField/CodeAutocompleteField.stories.tsx +89 -0
- package/src/components/CodeAutocompleteField/CodeAutocompleteField.tsx +22 -0
- package/src/components/CodeAutocompleteField/index.ts +1 -0
- package/src/components/ContextOverlay/contextoverlay.scss +10 -2
- package/src/components/Depiction/Depiction.tsx +57 -55
- package/src/components/Icon/IconButton.tsx +25 -11
- package/src/components/Icon/canonicalIconNames.tsx +4 -0
- package/src/components/MultiSelect/MultiSelect.stories.tsx +9 -47
- package/src/components/MultiSelect/MultiSelect.tsx +110 -66
- package/src/components/MultiSuggestField/MultiSuggestField.stories.tsx +58 -0
- package/src/components/MultiSuggestField/MultiSuggestField.tsx +22 -0
- package/src/components/Notification/notification.scss +20 -17
- package/src/components/OverviewItem/OverviewItem.tsx +11 -20
- package/src/components/PropertyValuePair/PropertyName.tsx +17 -4
- package/src/components/PropertyValuePair/propertyvalue.scss +17 -1
- package/src/components/Select/Select.stories.tsx +49 -20
- package/src/components/Select/Select.tsx +93 -18
- package/src/components/Select/_select.scss +13 -1
- package/src/components/SuggestField/SuggestField.stories.tsx +99 -0
- package/src/components/SuggestField/SuggestField.tsx +28 -0
- package/src/components/SuggestField/index.ts +5 -0
- package/src/components/TagInput/taginput.scss +14 -0
- package/src/components/index.scss +1 -1
- package/src/components/index.ts +3 -0
- package/src/extensions/react-flow/nodes/NodeContent.tsx +105 -87
- package/src/index.ts +2 -5
- package/src/components/AutoSuggestion/stories/AutoSuggestion.stories.tsx +0 -83
- package/src/components/AutocompleteField/stories/AutoCompleteField.stories.tsx +0 -86
|
@@ -1,35 +1,64 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { ComponentStory, ComponentMeta } from "@storybook/react";
|
|
3
2
|
import { loremIpsum } from "react-lorem-ipsum";
|
|
3
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
Button,
|
|
8
|
-
MenuItem,
|
|
9
|
-
} from "../../index";
|
|
5
|
+
import { helpersArgTypes } from "../../../.storybook/helpers";
|
|
6
|
+
import { Button, MenuItem, Select } from "../../index";
|
|
10
7
|
|
|
11
8
|
export default {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
title: "Forms/Select",
|
|
10
|
+
component: Select,
|
|
11
|
+
argTypes: {
|
|
12
|
+
icon: {
|
|
13
|
+
...helpersArgTypes.exampleIcon,
|
|
14
|
+
},
|
|
15
|
+
rightIcon: {
|
|
16
|
+
...helpersArgTypes.exampleIcon,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
} as Meta<typeof Select>;
|
|
17
20
|
|
|
18
|
-
const Template:
|
|
19
|
-
<Select {...args}>
|
|
20
|
-
<Button alignText="left" text="Select an element" fill outlined rightIcon="toggler-showmore"/>
|
|
21
|
-
</Select>
|
|
22
|
-
);
|
|
21
|
+
const Template: StoryFn<typeof Select> = (args) => <Select {...args} />;
|
|
23
22
|
|
|
24
23
|
export const Default = Template.bind({});
|
|
25
24
|
Default.args = {
|
|
26
25
|
items: loremIpsum({ p: 1, avgSentencesPerParagraph: 5, random: false })
|
|
27
26
|
.toString()
|
|
28
27
|
.split(".")
|
|
29
|
-
.map((item) => {
|
|
28
|
+
.map((item) => {
|
|
29
|
+
return { label: item };
|
|
30
|
+
}),
|
|
30
31
|
itemRenderer: (item, props) => {
|
|
31
|
-
return <MenuItem text={item.label}
|
|
32
|
+
return <MenuItem text={item.label} title={item.label} />;
|
|
32
33
|
},
|
|
33
34
|
fill: true,
|
|
34
|
-
|
|
35
|
-
}
|
|
35
|
+
// placeholder: loremIpsum({ p: 1, avgSentencesPerParagraph: 5, random: false })
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A controlled select target is used by adding `children` elements to `<Select />` directly.
|
|
40
|
+
* Properties like `text`, `placeholder`, `onClearanceHandler` and `onClearanceText` won't be evaluated then.
|
|
41
|
+
*/
|
|
42
|
+
export const ControlledTarget = Template.bind({});
|
|
43
|
+
ControlledTarget.args = {
|
|
44
|
+
...Default.args,
|
|
45
|
+
fill: false,
|
|
46
|
+
children: <Button text="Controlled select target" intent="primary" />,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* If the selection is not mandatory it is suggested to add an option letting the user reset the select value.
|
|
51
|
+
* `onClearanceHandler` follows the pattern to add a button on the right side of the element.
|
|
52
|
+
* An alternate way would be to add an additional select item to reset the value but this could come with a few usablity issues:
|
|
53
|
+
* user do not see it when the options are filtered, or the "empty" select option leads to the pre-selected option, etc.
|
|
54
|
+
*/
|
|
55
|
+
export const ClearanceOption = Template.bind({});
|
|
56
|
+
ClearanceOption.args = {
|
|
57
|
+
...Default.args,
|
|
58
|
+
text: "Example selection",
|
|
59
|
+
onClearanceText: "Reset the selection",
|
|
60
|
+
//onClearanceHandler: false,
|
|
61
|
+
onClearanceHandler: () => {
|
|
62
|
+
alert("Reset now.");
|
|
63
|
+
},
|
|
64
|
+
};
|
|
@@ -1,38 +1,113 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
Select2 as BlueprintSelect,
|
|
4
|
-
Select2Props as BlueprintSelectProps,
|
|
5
|
-
} from "@blueprintjs/select";
|
|
6
|
-
import { ContextOverlayProps } from "./../../index";
|
|
2
|
+
import { Select2 as BlueprintSelect, Select2Props as BlueprintSelectProps } from "@blueprintjs/select";
|
|
7
3
|
|
|
8
|
-
|
|
9
|
-
* FIXME: Currently we only route the original element through.
|
|
10
|
-
* We should add here basic elemeents and processes for target and selections, etc.
|
|
11
|
-
*/
|
|
4
|
+
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
12
5
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
import { Button, ButtonProps, ContextOverlayProps, Icon, OverflowText } from "./../../index";
|
|
7
|
+
|
|
8
|
+
export interface SelectProps<T>
|
|
9
|
+
extends Omit<BlueprintSelectProps<T>, "popoverTargetProps" | "popoverContentProps" | "popoverProps" | "popoverRef">,
|
|
10
|
+
Pick<ButtonProps, "icon" | "rightIcon"> {
|
|
11
|
+
/**
|
|
12
|
+
* Textual representation of the the selected value.
|
|
13
|
+
* This is displayed if the select target is not controlled directly via `children` elements.
|
|
14
|
+
*/
|
|
15
|
+
text?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Placeholder text displayed for selects without defined `text`.
|
|
18
|
+
* This is displayed if the select target is not controlled directly via `children` elements.
|
|
19
|
+
*/
|
|
20
|
+
placeholder?: string;
|
|
17
21
|
/**
|
|
18
22
|
* Props to spread to `ContextOverlay` that is used to display the dropdown.
|
|
19
23
|
*/
|
|
20
|
-
contextOverlayProps?: Partial<
|
|
24
|
+
contextOverlayProps?: Partial<
|
|
25
|
+
Omit<ContextOverlayProps, "content" | "defaultIsOpen" | "disabled" | "fill" | "renderTarget" | "targetTagName">
|
|
26
|
+
>;
|
|
27
|
+
/**
|
|
28
|
+
* Event handler to reset search input.
|
|
29
|
+
* Only works with the uncontrolled default select target.
|
|
30
|
+
* If set then `rightElement` is automatically set with an action button to trigger the handler.
|
|
31
|
+
*/
|
|
32
|
+
onClearanceHandler?: () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Tooltip to show for the clear button.
|
|
35
|
+
* Only works with the uncontrolled default select target.
|
|
36
|
+
*/
|
|
37
|
+
onClearanceText?: string;
|
|
21
38
|
}
|
|
22
39
|
|
|
23
40
|
/**
|
|
24
41
|
* Create a Select box without the HTML select element.
|
|
25
42
|
* It is possible to filter options, as well as to add new options if necessary.
|
|
43
|
+
*
|
|
44
|
+
* **Use this input element when the value is primarily selected from a defined set of elements.**
|
|
26
45
|
*/
|
|
27
|
-
export function Select<T>({
|
|
46
|
+
export function Select<T>({
|
|
47
|
+
contextOverlayProps,
|
|
48
|
+
className,
|
|
49
|
+
children,
|
|
50
|
+
text,
|
|
51
|
+
placeholder = "Select item ...",
|
|
52
|
+
icon,
|
|
53
|
+
rightIcon,
|
|
54
|
+
onClearanceHandler,
|
|
55
|
+
inputProps,
|
|
56
|
+
onClearanceText = "Reset selection",
|
|
57
|
+
...otherSelectProps
|
|
58
|
+
}: SelectProps<T>) {
|
|
28
59
|
return (
|
|
29
60
|
<BlueprintSelect<T>
|
|
30
|
-
popoverProps={{
|
|
61
|
+
popoverProps={{
|
|
62
|
+
minimal: true,
|
|
63
|
+
matchTargetWidth: otherSelectProps.fill ?? false,
|
|
64
|
+
...contextOverlayProps,
|
|
65
|
+
}}
|
|
66
|
+
inputProps={{
|
|
67
|
+
round: true,
|
|
68
|
+
...inputProps,
|
|
69
|
+
}}
|
|
70
|
+
className={`${eccgui}-select` + (className ? ` ${className}` : "")}
|
|
31
71
|
{...otherSelectProps}
|
|
32
|
-
|
|
72
|
+
>
|
|
73
|
+
{children ?? (
|
|
74
|
+
<Button
|
|
75
|
+
text={text ? <OverflowText>{text}</OverflowText> : <OverflowText>{placeholder}</OverflowText>}
|
|
76
|
+
alignText="left"
|
|
77
|
+
outlined
|
|
78
|
+
fill={otherSelectProps.fill ?? false}
|
|
79
|
+
disabled={otherSelectProps.disabled ?? false}
|
|
80
|
+
icon={icon}
|
|
81
|
+
rightIcon={
|
|
82
|
+
<>
|
|
83
|
+
{onClearanceHandler && text && (
|
|
84
|
+
<Icon
|
|
85
|
+
name="operation-clear"
|
|
86
|
+
tooltipText={onClearanceText ? onClearanceText : undefined}
|
|
87
|
+
onClick={(e) => {
|
|
88
|
+
e.stopPropagation();
|
|
89
|
+
onClearanceHandler();
|
|
90
|
+
}}
|
|
91
|
+
/>
|
|
92
|
+
)}
|
|
93
|
+
{typeof rightIcon === "string" ? (
|
|
94
|
+
<Icon name={rightIcon} />
|
|
95
|
+
) : (
|
|
96
|
+
rightIcon ?? <Icon name={"toggler-caretdown"} />
|
|
97
|
+
)}
|
|
98
|
+
</>
|
|
99
|
+
}
|
|
100
|
+
/>
|
|
101
|
+
)}
|
|
102
|
+
</BlueprintSelect>
|
|
33
103
|
);
|
|
34
104
|
}
|
|
35
105
|
|
|
36
|
-
Select.ofType
|
|
106
|
+
/** @deprecated: instead of `const MySelect = Select.ofType<MyType>()` use directly `<Select<MyType> {...props} />` */
|
|
107
|
+
function ofType<U>() {
|
|
108
|
+
return (props: SelectProps<U>) => <Select<U> {...props} />;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
Select.ofType = ofType;
|
|
37
112
|
|
|
38
113
|
export default Select;
|
|
@@ -2,7 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
.#{$ns}-select-popover {
|
|
4
4
|
.#{$ns}-menu {
|
|
5
|
-
max-height: unset;
|
|
6
5
|
max-width: unset;
|
|
6
|
+
max-height: unset;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.#{$eccgui}-select {
|
|
11
|
+
display: inline-block;
|
|
12
|
+
|
|
13
|
+
&.#{$ns}-fill {
|
|
14
|
+
display: block;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.#{$eccgui}-button {
|
|
18
|
+
max-width: 100%;
|
|
7
19
|
}
|
|
8
20
|
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
3
|
+
|
|
4
|
+
import { highlighterUtils, SuggestField, SuggestFieldProps, suggestFieldUtils } from "../../index";
|
|
5
|
+
|
|
6
|
+
const SuggestFieldStory: Meta<typeof SuggestField> = {
|
|
7
|
+
title: "Forms/SuggestField",
|
|
8
|
+
component: SuggestField,
|
|
9
|
+
argTypes: {},
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const Template: StoryFn<typeof SuggestField> = (args) => <SuggestField {...args}></SuggestField>;
|
|
13
|
+
|
|
14
|
+
// Renders string values as string
|
|
15
|
+
const defaultRenderer = (item: string) => item;
|
|
16
|
+
|
|
17
|
+
export const Default = Template.bind({});
|
|
18
|
+
const defaultArgs: SuggestFieldProps<string, string> = {
|
|
19
|
+
itemRenderer: (item: string) => `Rendered item: ${item}`,
|
|
20
|
+
itemValueRenderer: (item: string) => `Selected item: ${item}`,
|
|
21
|
+
itemValueString: (item: string) => `Query: ${item}`,
|
|
22
|
+
onSearch: (query: string) => {
|
|
23
|
+
const multiWord = highlighterUtils.extractSearchWords(query, true);
|
|
24
|
+
return ["search item A", "search element B", "search object C"].filter((word) =>
|
|
25
|
+
highlighterUtils.matchesAllWords(word.toLowerCase(), multiWord)
|
|
26
|
+
);
|
|
27
|
+
},
|
|
28
|
+
onChange: (elem) => {
|
|
29
|
+
console.log(`Entry '${elem}' selected!`);
|
|
30
|
+
},
|
|
31
|
+
itemValueSelector: defaultRenderer,
|
|
32
|
+
noResultText: "No result",
|
|
33
|
+
//fill: false,
|
|
34
|
+
onlyDropdownWithQuery: true,
|
|
35
|
+
};
|
|
36
|
+
Default.args = defaultArgs;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Display always the dropdown after the element has the focus.
|
|
40
|
+
* Do not wait until the query input was startet.
|
|
41
|
+
*/
|
|
42
|
+
export const DropdownOnFocus = Template.bind({});
|
|
43
|
+
const dropdownOnFocus: SuggestFieldProps<string, string> = {
|
|
44
|
+
...defaultArgs,
|
|
45
|
+
onlyDropdownWithQuery: false,
|
|
46
|
+
};
|
|
47
|
+
DropdownOnFocus.args = dropdownOnFocus;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Changes the search query for the selected item, e.g. when the rendered item text should be different from the query finding this item.
|
|
51
|
+
*/
|
|
52
|
+
export const AdaptQueryAfterSelection = Template.bind({});
|
|
53
|
+
const adaptQueryAfterSelection: SuggestFieldProps<string, string> = {
|
|
54
|
+
...defaultArgs,
|
|
55
|
+
resetQueryToValue: (selectedValue: string) => selectedValue,
|
|
56
|
+
};
|
|
57
|
+
AdaptQueryAfterSelection.args = adaptQueryAfterSelection;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Allows to reset a selection.
|
|
61
|
+
*/
|
|
62
|
+
export const AllowReset = Template.bind({});
|
|
63
|
+
const resetSelection: SuggestFieldProps<string, string> = {
|
|
64
|
+
...defaultArgs,
|
|
65
|
+
reset: {
|
|
66
|
+
resetValue: "",
|
|
67
|
+
resetButtonText: "Clear selected value",
|
|
68
|
+
resettableValue: (_value: string) => true,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
AllowReset.args = resetSelection;
|
|
72
|
+
|
|
73
|
+
export const AllowCustomValues = Template.bind({});
|
|
74
|
+
const allowCustomValues: SuggestFieldProps<string, string> = {
|
|
75
|
+
...defaultArgs,
|
|
76
|
+
createNewItem: {
|
|
77
|
+
itemRenderer: suggestFieldUtils.createNewItemRendererFactory(
|
|
78
|
+
(query: string) => `Create new item: ${query}`,
|
|
79
|
+
"item-add-artefact"
|
|
80
|
+
),
|
|
81
|
+
itemFromQuery: (item) => item,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
AllowCustomValues.args = allowCustomValues;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Changes the search query for the selected item, e.g. when the rendered item text should be different from the query finding this item.
|
|
88
|
+
*/
|
|
89
|
+
export const ReadOnlyState = Template.bind({});
|
|
90
|
+
const readOnlyState: SuggestFieldProps<string, string> = {
|
|
91
|
+
...defaultArgs,
|
|
92
|
+
initialValue: "search item B",
|
|
93
|
+
inputProps: {
|
|
94
|
+
readOnly: true,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
ReadOnlyState.args = readOnlyState;
|
|
98
|
+
|
|
99
|
+
export default SuggestFieldStory;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
4
|
+
import { AutoCompleteField, AutoCompleteFieldProps } from "../AutocompleteField/AutoCompleteField";
|
|
5
|
+
|
|
6
|
+
export type SuggestFieldProps<T, UPDATE_VALUE> = AutoCompleteFieldProps<T, UPDATE_VALUE>;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A component with the appearance of an input field that allows to select and optionally create new items.
|
|
10
|
+
* It shows suggestions for the entered text from which the user can select any option.
|
|
11
|
+
* It has the following fixed behavior:
|
|
12
|
+
*
|
|
13
|
+
* - When not focused, a different representation of the item value can be shown, e.g. the label of the value.
|
|
14
|
+
* - When changing an existing item the input text is set to the original value in order to be able to edit the original value.
|
|
15
|
+
* - When for a specific input text, the only item returns is the currently set item itself, all items are shown below it, to make
|
|
16
|
+
* clear that there are still other items to choose from.
|
|
17
|
+
* - The suggestions are fetched with a short delay, so not too many unnecessary requests are fired.
|
|
18
|
+
* - Items where itemRenderer returns a string have a default representation, i.e. highlighting of search words, active flag etc.
|
|
19
|
+
*/
|
|
20
|
+
export function SuggestField<T, UPDATE_VALUE>({ className, ...otherProps }: SuggestFieldProps<T, UPDATE_VALUE>) {
|
|
21
|
+
// Currently this works only as an alias element for `AutoCompleteField`.
|
|
22
|
+
return (
|
|
23
|
+
<AutoCompleteField<T, UPDATE_VALUE>
|
|
24
|
+
className={`${eccgui}-suggestfield` + (className ? ` ${className}` : "")}
|
|
25
|
+
{...otherProps}
|
|
26
|
+
/>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
@import "~@blueprintjs/core/src/components/tag-input/tag-input";
|
|
2
2
|
|
|
3
3
|
.#{$ns}-tag-input {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
|
|
6
|
+
&.#{$ns}-input {
|
|
7
|
+
height: auto;
|
|
8
|
+
min-height: $eccgui-size-textfield-height-regular;
|
|
9
|
+
padding-right: ($pt-button-height - $pt-button-height-small) * 0.5;
|
|
10
|
+
}
|
|
11
|
+
|
|
4
12
|
.#{$eccgui}-spinner--position-inline {
|
|
5
13
|
height: $pt-button-height-small;
|
|
6
14
|
}
|
|
15
|
+
|
|
16
|
+
.#{$eccgui}-button {
|
|
17
|
+
min-width: $pt-button-height-small;
|
|
18
|
+
min-height: $pt-button-height-small;
|
|
19
|
+
margin: ($pt-button-height - $pt-button-height-small) * 0.5 0 0 0;
|
|
20
|
+
}
|
|
7
21
|
}
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
@import "./Structure/titles";
|
|
27
27
|
@import "./Table/table";
|
|
28
28
|
@import "./Tabs/tabs";
|
|
29
|
-
@import "./TagInput/taginput";
|
|
30
29
|
@import "./Tag/tag";
|
|
31
30
|
@import "./TextField/textfield";
|
|
31
|
+
@import "./TagInput/taginput";
|
|
32
32
|
@import "./Toolbar/toolbar";
|
|
33
33
|
@import "./Tooltip/tooltip";
|
|
34
34
|
@import "./Tree/tree";
|
package/src/components/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export * from "./Accordion";
|
|
2
2
|
export * from "./Application";
|
|
3
3
|
export * from "./AutocompleteField";
|
|
4
|
+
export * from "./SuggestField";
|
|
4
5
|
export * from "./AutoSuggestion";
|
|
6
|
+
export * from "./CodeAutocompleteField";
|
|
5
7
|
export * from "./Badge/Badge";
|
|
6
8
|
export * from "./Breadcrumb";
|
|
7
9
|
export * from "./Button/Button";
|
|
@@ -21,6 +23,7 @@ export * from "./Link/Link";
|
|
|
21
23
|
export * from "./List/List";
|
|
22
24
|
export * from "./Menu";
|
|
23
25
|
export * from "./MultiSelect/MultiSelect";
|
|
26
|
+
export * from "./MultiSuggestField/MultiSuggestField";
|
|
24
27
|
export * from "./Notification";
|
|
25
28
|
export * from "./NumericInput/NumericInput";
|
|
26
29
|
export * from "./OverviewItem";
|