Skip to content

Commit 2ea509d

Browse files
committed
feat: rework captions
- introduce new options to configure placeholder text and empty caption - show placeholder when widget is not open and empty - split emptySelectionCaption and emptyOptionCaption
1 parent e1134be commit 2ea509d

21 files changed

+60
-28
lines changed

packages/modules/data-widgets/src/themesource/datawidgets/web/_datagrid-dropdown-filter.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ $root: ".widget-dropdown-filter";
281281
width: initial;
282282
}
283283

284-
&:not(:focus-within) {
284+
&:not(:focus-within):not([data-empty]) {
285285
#{$root}-input {
286286
opacity: 0;
287287
flex-shrink: 1;

packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorConfig.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export function getProperties(values: DatagridDropdownFilterPreviewProps, defaul
2222
if (values.filterable) {
2323
hidePropertyIn(defaultProperties, values, "clearable");
2424
hidePropertyIn(defaultProperties, values, "emptyOptionCaption");
25+
} else {
26+
hidePropertyIn(defaultProperties, values, "filterInputPlaceholderCaption");
2527
}
2628

2729
if (!showSelectedItemsStyle) {
@@ -71,7 +73,7 @@ export const getPreview = (values: DatagridDropdownFilterPreviewProps, isDarkMod
7173
text({
7274
fontColor: palette.text.secondary,
7375
italic: true
74-
})(values.emptyOptionCaption || " ")
76+
})(values.emptySelectionCaption || " ")
7577
],
7678
grow: 1
7779
} as ContainerProps,

packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.editorPreview.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,7 @@ const noop = (): void => {};
2626

2727
function getPreviewValue(props: DatagridDropdownFilterPreviewProps): string {
2828
let value = props.defaultValue;
29-
if (!props.filterable) {
30-
value ||= props.emptyOptionCaption || "Select";
31-
} else {
32-
value ||= "Search";
33-
}
29+
value ||= props.emptySelectionCaption || (props.filterable ? "Search" : "Select");
3430
return value;
3531
}
3632

packages/pluggableWidgets/datagrid-dropdown-filter-web/src/DatagridDropdownFilter.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,23 @@
142142
</property>
143143
</propertyGroup>
144144
</propertyGroup>
145-
<propertyGroup caption="Accessibility">
145+
<propertyGroup caption="Advanced">
146146
<propertyGroup caption="Accessibility">
147147
<property key="ariaLabel" type="textTemplate" required="false">
148148
<caption>Input caption</caption>
149149
<description>Assistive technology will read this upon reaching the input element.</description>
150150
</property>
151151
</propertyGroup>
152+
<propertyGroup caption="Texts">
153+
<property key="emptySelectionCaption" type="textTemplate" required="false">
154+
<caption>Empty selection caption</caption>
155+
<description>This text is shown if no options are selected. For example 'No options are selected' or 'Select color'.</description>
156+
</property>
157+
<property key="filterInputPlaceholderCaption" type="textTemplate" required="false">
158+
<caption>Filter input placeholder</caption>
159+
<description>This text is shown as placeholder for filterable filters. For example 'type to search'.</description>
160+
</property>
161+
</propertyGroup>
152162
</propertyGroup>
153163
</properties>
154164
</widget>

packages/pluggableWidgets/datagrid-dropdown-filter-web/src/components/AttrFilter.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ function Connector(props: DatagridDropdownFilterContainerProps & EnumFilterProps
2727
ariaLabel={props.ariaLabel?.value}
2828
className={props.class}
2929
styles={props.style}
30-
emptyCaption={props.emptyOptionCaption?.value}
30+
emptyOptionCaption={props.emptyOptionCaption?.value ?? ""}
31+
emptySelectionCaption={props.emptySelectionCaption?.value ?? ""}
32+
placeholder={props.filterInputPlaceholderCaption?.value ?? ""}
3133
defaultValue={props.defaultValue?.value}
3234
parentChannelName={props.parentChannelName}
3335
/>

packages/pluggableWidgets/datagrid-dropdown-filter-web/src/components/RefFilter.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ function Connector(props: DatagridDropdownFilterContainerProps & RefFilterProps)
1313
ariaLabel={props.ariaLabel?.value}
1414
className={props.class}
1515
styles={props.style}
16-
emptyCaption={props.emptyOptionCaption?.value}
16+
emptyOptionCaption={props.emptyOptionCaption?.value ?? ""}
17+
emptySelectionCaption={props.emptySelectionCaption?.value ?? ""}
18+
placeholder={props.filterInputPlaceholderCaption?.value ?? ""}
1719
defaultValue={props.defaultValue?.value}
1820
parentChannelName={props.parentChannelName}
1921
/>

packages/pluggableWidgets/datagrid-dropdown-filter-web/typings/DatagridDropdownFilterProps.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ export interface DatagridDropdownFilterContainerProps {
4848
valueAttribute?: EditableValue<string>;
4949
onChange?: ActionValue;
5050
ariaLabel?: DynamicValue<string>;
51+
emptySelectionCaption?: DynamicValue<string>;
52+
filterInputPlaceholderCaption?: DynamicValue<string>;
5153
}
5254

5355
export interface DatagridDropdownFilterPreviewProps {
@@ -80,4 +82,6 @@ export interface DatagridDropdownFilterPreviewProps {
8082
valueAttribute: string;
8183
onChange: {} | null;
8284
ariaLabel: string;
85+
emptySelectionCaption: string;
86+
filterInputPlaceholderCaption: string;
8387
}

packages/shared/widget-plugin-dropdown-filter/src/containers/EnumFilterContainer.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ export interface EnumFilterContainerProps {
2121
ariaLabel?: string;
2222
className?: string;
2323
defaultValue?: string;
24-
emptyCaption?: string;
24+
emptyOptionCaption: string;
25+
emptySelectionCaption: string;
26+
placeholder: string;
2527
filterOptions: FilterOptionsType[];
2628
filterStore: EnumFilterStore;
2729
multiselect: boolean;
@@ -82,6 +84,7 @@ const ComboboxWidget = observer(function ComboboxWidget(props: EnumFilterContain
8284
<Combobox
8385
options={ctrl2.options}
8486
inputPlaceholder={ctrl2.inputPlaceholder}
87+
emptyCaption={ctrl2.emptyCaption}
8588
useComboboxProps={ctrl2.useComboboxProps}
8689
onClear={ctrl2.handleClear}
8790
onFocus={ctrl2.handleFocus}
@@ -108,6 +111,7 @@ const TagPickerWidget = observer(function TagPickerWidget(props: EnumFilterConta
108111
onClear={ctrl3.handleClear}
109112
onBlur={ctrl3.handleBlur}
110113
inputPlaceholder={ctrl3.inputPlaceholder}
114+
emptyCaption={ctrl3.emptyCaption}
111115
empty={ctrl3.isEmpty}
112116
showCheckboxes={props.selectionMethod === "checkbox"}
113117
selectedStyle={props.selectedItemsStyle}

packages/shared/widget-plugin-dropdown-filter/src/containers/RefFilterContainer.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ export interface RefFilterContainerProps {
2222
ariaLabel?: string;
2323
className?: string;
2424
defaultValue?: string;
25-
emptyCaption?: string;
25+
emptyOptionCaption: string;
26+
emptySelectionCaption: string;
27+
placeholder: string;
2628
filterStore: RefFilterStore;
2729
multiselect: boolean;
2830
name: string;
@@ -86,6 +88,7 @@ const ComboboxWidget = observer(function ComboboxWidget(props: RefFilterContaine
8688
<Combobox
8789
options={ctrl2.options}
8890
inputPlaceholder={ctrl2.inputPlaceholder}
91+
emptyCaption={ctrl2.emptyCaption}
8992
useComboboxProps={ctrl2.useComboboxProps}
9093
onClear={ctrl2.handleClear}
9194
onFocus={ctrl2.handleFocus}
@@ -116,6 +119,7 @@ const TagPickerWidget = observer(function TagPickerWidget(props: RefFilterContai
116119
onFocus={ctrl3.handleFocus}
117120
onMenuScroll={handleMenuScroll}
118121
inputPlaceholder={ctrl3.inputPlaceholder}
122+
emptyCaption={ctrl3.emptyCaption}
119123
empty={ctrl3.isEmpty}
120124
showCheckboxes={props.selectionMethod === "checkbox"}
121125
selectedStyle={props.selectedItemsStyle}

packages/shared/widget-plugin-dropdown-filter/src/controllers/EnumBaseController.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ export interface EnumBaseControllerProps {
5353
multiselect: boolean;
5454
onChange?: ActionValue;
5555
valueAttribute?: EditableValue<string>;
56-
emptyCaption?: string;
57-
placeholder?: string;
56+
emptyOptionCaption: string;
57+
emptySelectionCaption: string;
58+
placeholder: string;
5859
}
5960

6061
export interface CustomOption<T> {

0 commit comments

Comments
 (0)