Skip to content

Commit a614670

Browse files
committed
refactor(ui5-input): support suggestionList hook from Input template (#10840)
1 parent 4293449 commit a614670

File tree

4 files changed

+21
-12
lines changed

4 files changed

+21
-12
lines changed

packages/main/src/InputPopoverTemplate.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { JsxTemplateResult } from "@ui5/webcomponents-base/dist/index.js";
12
import type Input from "./Input.js";
23
import Icon from "./Icon.js";
34
import error from "@ui5/webcomponents-icons/dist/error.js";
@@ -8,10 +9,12 @@ import information from "@ui5/webcomponents-icons/dist/information.js";
89
import Popover from "./Popover.js";
910
import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
1011

11-
export default function InputPopoverTemplate(this: Input) {
12+
export default function InputPopoverTemplate(this: Input, hooks?: { suggestionsList?: (this: Input) => JsxTemplateResult }) {
13+
const suggestionsList = hooks?.suggestionsList;
14+
1215
return (
1316
<>
14-
{this._effectiveShowSuggestions && this.Suggestions?.template.call(this, valueStateMessage, valueStateMessageInputIcon) }
17+
{this._effectiveShowSuggestions && this.Suggestions?.template.call(this, { suggestionsList, valueStateMessage, valueStateMessageInputIcon }) }
1518

1619
{this.hasValueStateMessage &&
1720
<Popover

packages/main/src/InputTemplate.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import type Input from "./Input.js";
2+
import type { JsxTemplateResult } from "@ui5/webcomponents-base/dist/index.js";
23
import Icon from "./Icon.js";
34
import decline from "@ui5/webcomponents-icons/dist/decline.js";
45
import InputPopoverTemplate from "./InputPopoverTemplate.js";
56

6-
type TemplateHook = () => void;
7+
type TemplateHook = () => JsxTemplateResult;
78

8-
export default function InputTemplate(this: Input, hooks?: { preContent: TemplateHook, postContent: TemplateHook }) {
9+
export default function InputTemplate(this: Input, hooks?: { preContent: TemplateHook, postContent: TemplateHook, suggestionsList?: TemplateHook }) {
10+
const suggestionsList = hooks?.suggestionsList;
911
const preContent = hooks?.preContent || defaultPreContent;
1012
const postContent = hooks?.postContent || defaultPostContent;
1113

@@ -104,7 +106,7 @@ export default function InputTemplate(this: Input, hooks?: { preContent: Templat
104106
</div>
105107
</div>
106108

107-
{ InputPopoverTemplate.call(this) }
109+
{ InputPopoverTemplate.call(this, { suggestionsList }) }
108110
</>
109111
);
110112
}

packages/main/src/features/InputSuggestionsTemplate.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import List from "../List.js";
77
import ResponsivePopover from "../ResponsivePopover.js";
88
import Button from "../Button.js";
99

10-
export default function InputSuggestionsTemplate(this: Input, valueStateMessage: (this: Input) => JsxTemplateResult, valueStateMessageInputIcon: (this: Input) => string) {
10+
export default function InputSuggestionsTemplate(this: Input, hooks?: { suggestionsList?: (this: Input) => JsxTemplateResult, valueStateMessage: (this: Input) => JsxTemplateResult, valueStateMessageInputIcon: (this: Input) => string }) {
11+
const suggestionsList = hooks?.suggestionsList || defaultSuggestionsList;
12+
const valueStateMessage = hooks?.valueStateMessage;
13+
const valueStateMessageInputIcon = hooks?.valueStateMessageInputIcon;
14+
1115
return (
1216
<ResponsivePopover
1317
class={this.classes.popover}
@@ -55,8 +59,8 @@ export default function InputSuggestionsTemplate(this: Input, valueStateMessage:
5559

5660
{this.hasValueStateMessage &&
5761
<div class={this.classes.popoverValueState} style={this.styles.suggestionPopoverHeader}>
58-
<Icon class="ui5-input-value-state-message-icon" name={valueStateMessageInputIcon.call(this)} />
59-
{ this.open && valueStateMessage.call(this) }
62+
<Icon class="ui5-input-value-state-message-icon" name={valueStateMessageInputIcon?.call(this)} />
63+
{ this.open && valueStateMessage?.call(this) }
6064
</div>
6165
}
6266
</>
@@ -72,8 +76,8 @@ export default function InputSuggestionsTemplate(this: Input, valueStateMessage:
7276
}}
7377
style={this.styles.suggestionPopoverHeader}
7478
>
75-
<Icon class="ui5-input-value-state-message-icon" name={valueStateMessageInputIcon.call(this)} />
76-
{ this.open && valueStateMessage.call(this) }
79+
<Icon class="ui5-input-value-state-message-icon" name={valueStateMessageInputIcon?.call(this)} />
80+
{ this.open && valueStateMessage?.call(this) }
7781
</div>
7882
}
7983

@@ -93,7 +97,7 @@ export default function InputSuggestionsTemplate(this: Input, valueStateMessage:
9397
);
9498
}
9599

96-
function suggestionsList(this: Input) {
100+
function defaultSuggestionsList(this: Input) {
97101
return (
98102
<List
99103
separators={this.suggestionSeparators}

packages/tools/components-package/nps.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const getScripts = (options) => {
1919
// The script creates the "src/generated/js-imports/Illustration.js" file that registers loaders (dynamic JS imports) for each illustration
2020
const createIllustrationsLoadersScript = illustrationsData.map(illustrations => `node ${LIB}/generate-js-imports/illustrations.js ${illustrations.destinationPath} ${illustrations.dynamicImports.outputFile} ${illustrations.set} ${illustrations.collection} ${illustrations.dynamicImports.location} ${illustrations.dynamicImports.filterOut.join(" ")}`).join(" && ");
2121

22-
const tsOption = !options.legacy;
22+
const tsOption = !options.legacy || options.jsx;
2323
const tsCommandOld = tsOption ? "tsc" : "";
2424
let tsWatchCommandStandalone = tsOption ? "tsc --watch" : "";
2525
// this command is only used for standalone projects. monorepo projects get their watch from vite, so opt-out here

0 commit comments

Comments
 (0)