@sapui5/sap.fe.controls 1.139.0 → 1.141.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 +1 -1
- package/src/sap/fe/controls/.library +1 -1
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +97 -19
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +113 -27
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +28 -28
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +41 -34
- package/src/sap/fe/controls/easyFilter/PXFeedback.js +26 -0
- package/src/sap/fe/controls/easyFilter/PXFeedback.ts +14 -0
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +22 -2
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.ts +34 -1
- package/src/sap/fe/controls/inlineEdit/InlineEditIndicator.js +1 -2
- package/src/sap/fe/controls/inlineEdit/InlineEditIndicator.tsx +0 -1
- package/src/sap/fe/controls/library.js +1 -1
- package/src/sap/fe/controls/messagebundle.properties +7 -3
- package/src/sap/fe/controls/messagebundle_ar.properties +4 -2
- package/src/sap/fe/controls/messagebundle_bg.properties +4 -2
- package/src/sap/fe/controls/messagebundle_ca.properties +4 -2
- package/src/sap/fe/controls/messagebundle_cnr.properties +4 -2
- package/src/sap/fe/controls/messagebundle_cs.properties +4 -2
- package/src/sap/fe/controls/messagebundle_cy.properties +4 -2
- package/src/sap/fe/controls/messagebundle_da.properties +4 -2
- package/src/sap/fe/controls/messagebundle_de.properties +8 -6
- package/src/sap/fe/controls/messagebundle_el.properties +4 -2
- package/src/sap/fe/controls/messagebundle_en.properties +4 -2
- package/src/sap/fe/controls/messagebundle_en_GB.properties +4 -2
- package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +4 -2
- package/src/sap/fe/controls/messagebundle_es.properties +4 -2
- package/src/sap/fe/controls/messagebundle_es_MX.properties +4 -2
- package/src/sap/fe/controls/messagebundle_et.properties +4 -2
- package/src/sap/fe/controls/messagebundle_fi.properties +4 -2
- package/src/sap/fe/controls/messagebundle_fr.properties +5 -3
- package/src/sap/fe/controls/messagebundle_fr_CA.properties +4 -2
- package/src/sap/fe/controls/messagebundle_hi.properties +4 -2
- package/src/sap/fe/controls/messagebundle_hr.properties +4 -2
- package/src/sap/fe/controls/messagebundle_hu.properties +4 -2
- package/src/sap/fe/controls/messagebundle_id.properties +4 -2
- package/src/sap/fe/controls/messagebundle_it.properties +4 -2
- package/src/sap/fe/controls/messagebundle_iw.properties +4 -2
- package/src/sap/fe/controls/messagebundle_ja.properties +4 -2
- package/src/sap/fe/controls/messagebundle_kk.properties +4 -2
- package/src/sap/fe/controls/messagebundle_ko.properties +4 -2
- package/src/sap/fe/controls/messagebundle_lt.properties +4 -2
- package/src/sap/fe/controls/messagebundle_lv.properties +4 -2
- package/src/sap/fe/controls/messagebundle_mk.properties +4 -2
- package/src/sap/fe/controls/messagebundle_ms.properties +4 -2
- package/src/sap/fe/controls/messagebundle_nl.properties +4 -2
- package/src/sap/fe/controls/messagebundle_no.properties +4 -2
- package/src/sap/fe/controls/messagebundle_pl.properties +4 -2
- package/src/sap/fe/controls/messagebundle_pt.properties +4 -2
- package/src/sap/fe/controls/messagebundle_pt_PT.properties +4 -2
- package/src/sap/fe/controls/messagebundle_ro.properties +4 -2
- package/src/sap/fe/controls/messagebundle_ru.properties +4 -2
- package/src/sap/fe/controls/messagebundle_sh.properties +4 -2
- package/src/sap/fe/controls/messagebundle_sk.properties +4 -2
- package/src/sap/fe/controls/messagebundle_sl.properties +4 -2
- package/src/sap/fe/controls/messagebundle_sr.properties +4 -2
- package/src/sap/fe/controls/messagebundle_sv.properties +4 -2
- package/src/sap/fe/controls/messagebundle_th.properties +4 -2
- package/src/sap/fe/controls/messagebundle_tr.properties +4 -2
- package/src/sap/fe/controls/messagebundle_uk.properties +4 -2
- package/src/sap/fe/controls/messagebundle_vi.properties +4 -2
- package/src/sap/fe/controls/messagebundle_zh_CN.properties +4 -2
- package/src/sap/fe/controls/messagebundle_zh_TW.properties +4 -2
- package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +38 -4
- package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.tsx +37 -3
- package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +8 -1
- package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.tsx +5 -0
|
@@ -34,16 +34,21 @@ import deepClone from "sap/base/util/deepClone";
|
|
|
34
34
|
import { and, bindState } from "sap/fe/base/BindingToolkit";
|
|
35
35
|
import EasyFilterInput from "sap/fe/controls/easyFilter/EasyFilterInput";
|
|
36
36
|
import type EasyFilterToken from "sap/fe/controls/easyFilter/Token";
|
|
37
|
+
import HBox from "sap/m/HBox";
|
|
37
38
|
import MessageStrip from "sap/m/MessageStrip";
|
|
39
|
+
import MessageToast from "sap/m/MessageToast";
|
|
38
40
|
import OverflowToolbar from "sap/m/OverflowToolbar";
|
|
41
|
+
import ToggleButton from "sap/m/ToggleButton";
|
|
39
42
|
import ToolbarSpacer from "sap/m/ToolbarSpacer";
|
|
40
43
|
import MessageType from "sap/ui/core/message/MessageType";
|
|
41
44
|
import FilterOperator from "sap/ui/model/FilterOperator";
|
|
42
45
|
import FESRHelper from "sap/ui/performance/trace/FESRHelper";
|
|
43
46
|
import type EasyFilter from "ux/eng/fioriai/reuse/easyfilter/EasyFilter";
|
|
44
|
-
import type { EasyFilterMetadata, EasyFilterResult, PropertyMetadata
|
|
47
|
+
import type { EasyFilterMetadata, EasyFilterResult, PropertyMetadata } from "ux/eng/fioriai/reuse/easyfilter/EasyFilter";
|
|
48
|
+
import type { Success } from "ux/eng/fioriai/reuse/shared";
|
|
45
49
|
import type { EventHandler } from "../../../../../../../types/extension_types";
|
|
46
50
|
import { AINotice } from "./AINotice";
|
|
51
|
+
import { triggerPXIntegration } from "./PXFeedback";
|
|
47
52
|
import EasyFilterUtils from "./utils";
|
|
48
53
|
|
|
49
54
|
//For current release we are ignoring "All" and "Any"
|
|
@@ -116,16 +121,7 @@ export type EasyFilterPropertyMetadata = PropertyMetadata &
|
|
|
116
121
|
type: Exclude<TokenType, "ValueHelp">;
|
|
117
122
|
defaultValue?: TokenSelectedValuesDefinition[];
|
|
118
123
|
}
|
|
119
|
-
)
|
|
120
|
-
filterRestriction?:
|
|
121
|
-
| "SingleValue"
|
|
122
|
-
| "MultiValue"
|
|
123
|
-
| "SingleRange"
|
|
124
|
-
| "MultiRange"
|
|
125
|
-
| "SearchExpression"
|
|
126
|
-
| "MultiRangeOrSearchExpression";
|
|
127
|
-
hiddenFilter?: boolean;
|
|
128
|
-
};
|
|
124
|
+
);
|
|
129
125
|
|
|
130
126
|
// We need the third arguement because there might be a chance of composite keys scenario
|
|
131
127
|
type DataFetcher = (
|
|
@@ -150,7 +146,6 @@ export type EasyFilterBarContainer$ShowValueHelpEvent = UI5Event<
|
|
|
150
146
|
|
|
151
147
|
/*
|
|
152
148
|
* Delivery for beta release for the easy filter feature.
|
|
153
|
-
* @experimental
|
|
154
149
|
*/
|
|
155
150
|
@defineUI5Class("sap.fe.controls.easyFilter.EasyFilterBarContainer")
|
|
156
151
|
export default class EasyFilterBarContainer extends Control {
|
|
@@ -210,6 +205,10 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
210
205
|
singleValueMessageStripText?: string;
|
|
211
206
|
messageStripText?: string;
|
|
212
207
|
showMessageStrip?: boolean;
|
|
208
|
+
messageStripType: MessageType;
|
|
209
|
+
thumbButtonEnabled: boolean;
|
|
210
|
+
thumbUpButtonPressed: boolean;
|
|
211
|
+
thumbDownButtonPressed: boolean;
|
|
213
212
|
}> = {
|
|
214
213
|
showResult: false,
|
|
215
214
|
tokens: [] as TokenDefinition[],
|
|
@@ -217,7 +216,11 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
217
216
|
showSingleValueMessageStrip: false,
|
|
218
217
|
singleValueMessageStripText: "",
|
|
219
218
|
messageStripText: "",
|
|
220
|
-
showMessageStrip: false
|
|
219
|
+
showMessageStrip: false,
|
|
220
|
+
messageStripType: MessageType.Error,
|
|
221
|
+
thumbButtonEnabled: true,
|
|
222
|
+
thumbUpButtonPressed: false,
|
|
223
|
+
thumbDownButtonPressed: false
|
|
221
224
|
};
|
|
222
225
|
|
|
223
226
|
private innerControlPopover?: Popover;
|
|
@@ -395,8 +398,9 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
395
398
|
}
|
|
396
399
|
} else {
|
|
397
400
|
// error
|
|
398
|
-
this.easyFilterInput.current?.setAsInvalid(easyFilterResult.message);
|
|
399
401
|
this.removeNonMandatoryTokens();
|
|
402
|
+
this.setMessageStrip(easyFilterResult.message);
|
|
403
|
+
this.state.messageStripType = MessageType.Warning;
|
|
400
404
|
Log.error("Error while generating filter criteria: ", easyFilterResult.message);
|
|
401
405
|
}
|
|
402
406
|
|
|
@@ -409,11 +413,6 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
409
413
|
* @private
|
|
410
414
|
*/
|
|
411
415
|
private handleV1Success(easyFilterResult: Success<EasyFilter.EasyFilterResult>): void {
|
|
412
|
-
if (easyFilterResult.data.unclear) {
|
|
413
|
-
this.easyFilterInput.current?.setAsInvalid(
|
|
414
|
-
this.resourceBundle.getText("M_EASY_FILTER_UNCLEAR_INPUT", [easyFilterResult.data.unclear])
|
|
415
|
-
);
|
|
416
|
-
}
|
|
417
416
|
if (easyFilterResult.data.filter) {
|
|
418
417
|
// We need to show a message to the user that the filter criteria has been generated
|
|
419
418
|
Log.debug("Filter criteria generated: ", JSON.stringify(easyFilterResult.data.filter, null, 2));
|
|
@@ -421,14 +420,14 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
421
420
|
const tokens = [...this.state.tokens].filter((token) => token.isRequired);
|
|
422
421
|
|
|
423
422
|
// Clear the previous message strip for validated filters
|
|
424
|
-
this.
|
|
423
|
+
this.clearMessageStrip();
|
|
425
424
|
|
|
426
425
|
// Validate and apply the filter criteria
|
|
427
426
|
EasyFilterUtils.formatData(
|
|
428
427
|
tokens,
|
|
429
428
|
easyFilterResult.data.filter,
|
|
430
429
|
this.filterBarMetadata as EasyFilterPropertyMetadata[],
|
|
431
|
-
this.
|
|
430
|
+
this.setMessageStrip.bind(this)
|
|
432
431
|
);
|
|
433
432
|
|
|
434
433
|
//We only have to call the dataFetcher on the VH tokens which have been asked by the user
|
|
@@ -483,6 +482,9 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
483
482
|
|
|
484
483
|
const updatedTokens = this.verifySingleSelectTokenValues(tokens);
|
|
485
484
|
this.state.showResult = true;
|
|
485
|
+
this.state.thumbButtonEnabled = true;
|
|
486
|
+
this.state.thumbDownButtonPressed = false;
|
|
487
|
+
this.state.thumbUpButtonPressed = false;
|
|
486
488
|
this.state.tokens = updatedTokens;
|
|
487
489
|
}
|
|
488
490
|
}
|
|
@@ -507,12 +509,18 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
507
509
|
return tokens;
|
|
508
510
|
}
|
|
509
511
|
|
|
510
|
-
|
|
512
|
+
clearMessageStrip(): void {
|
|
513
|
+
this.state.thumbDownButtonPressed = false;
|
|
514
|
+
this.state.thumbUpButtonPressed = false;
|
|
511
515
|
this.state.showMessageStrip = false;
|
|
512
516
|
this.state.messageStripText = "";
|
|
517
|
+
this.state.messageStripType = MessageType.Error;
|
|
513
518
|
}
|
|
514
519
|
|
|
515
|
-
|
|
520
|
+
setMessageStrip(text: string): void {
|
|
521
|
+
this.state.thumbDownButtonPressed = false;
|
|
522
|
+
this.state.thumbUpButtonPressed = false;
|
|
523
|
+
this.state.thumbButtonEnabled = true;
|
|
516
524
|
this.state.messageStripText = text;
|
|
517
525
|
this.state.showMessageStrip = true;
|
|
518
526
|
}
|
|
@@ -612,8 +620,79 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
612
620
|
(this.tokenizer?.current as FocusHandlingControl).onsapfocusleave = (): void => {};
|
|
613
621
|
}
|
|
614
622
|
|
|
623
|
+
private onThumbUpPressed(): void {
|
|
624
|
+
this.state.thumbUpButtonPressed = true;
|
|
625
|
+
this.state.thumbDownButtonPressed = false;
|
|
626
|
+
triggerPXIntegration("thumbUp");
|
|
627
|
+
this.onThumbPressed();
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
private onThumbDownPressed(): void {
|
|
631
|
+
this.state.thumbDownButtonPressed = true;
|
|
632
|
+
this.state.thumbUpButtonPressed = false;
|
|
633
|
+
triggerPXIntegration("thumbDown");
|
|
634
|
+
this.onThumbPressed();
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
private onThumbPressed(): void {
|
|
638
|
+
this.state.thumbButtonEnabled = false;
|
|
639
|
+
MessageToast.show(this.resourceBundle.getText("C_EASY_FILTER_FEEDBACK_SENT"));
|
|
640
|
+
}
|
|
641
|
+
|
|
615
642
|
createContent(): VBox {
|
|
616
643
|
const $topGoBtn = createReference<Button>();
|
|
644
|
+
const thumbUpButtonTokenizer = (
|
|
645
|
+
<ToggleButton
|
|
646
|
+
icon={"sap-icon://thumb-up"}
|
|
647
|
+
tooltip={this.resourceBundle.getText("C_EASY_FILTER_THUMBS_UP")}
|
|
648
|
+
type={"Transparent"}
|
|
649
|
+
press={(): void => {
|
|
650
|
+
return this.onThumbUpPressed();
|
|
651
|
+
}}
|
|
652
|
+
enabled={bindState(this.state, "thumbButtonEnabled")}
|
|
653
|
+
pressed={bindState(this.state, "thumbUpButtonPressed")}
|
|
654
|
+
/>
|
|
655
|
+
);
|
|
656
|
+
FESRHelper.setSemanticStepname(thumbUpButtonTokenizer, "press", "fe4:eft:t:thumbUp");
|
|
657
|
+
const thumbDownButtonTokenizer = (
|
|
658
|
+
<ToggleButton
|
|
659
|
+
icon={"sap-icon://thumb-down"}
|
|
660
|
+
tooltip={this.resourceBundle.getText("C_EASY_FILTER_THUMBS_DOWN")}
|
|
661
|
+
type={"Transparent"}
|
|
662
|
+
press={(): void => {
|
|
663
|
+
return this.onThumbDownPressed();
|
|
664
|
+
}}
|
|
665
|
+
enabled={bindState(this.state, "thumbButtonEnabled")}
|
|
666
|
+
pressed={bindState(this.state, "thumbDownButtonPressed")}
|
|
667
|
+
/>
|
|
668
|
+
);
|
|
669
|
+
FESRHelper.setSemanticStepname(thumbDownButtonTokenizer, "press", "fe4:eft:t:thumbDown");
|
|
670
|
+
const thumbUpButtonMessageStripe = (
|
|
671
|
+
<ToggleButton
|
|
672
|
+
icon={"sap-icon://thumb-up"}
|
|
673
|
+
tooltip={this.resourceBundle.getText("C_EASY_FILTER_THUMBS_UP")}
|
|
674
|
+
type={"Transparent"}
|
|
675
|
+
press={(): void => {
|
|
676
|
+
return this.onThumbUpPressed();
|
|
677
|
+
}}
|
|
678
|
+
enabled={bindState(this.state, "thumbButtonEnabled")}
|
|
679
|
+
pressed={bindState(this.state, "thumbUpButtonPressed")}
|
|
680
|
+
/>
|
|
681
|
+
);
|
|
682
|
+
FESRHelper.setSemanticStepname(thumbUpButtonMessageStripe, "press", "fe4:eft:ms:thumbUp");
|
|
683
|
+
const thumbDownButtonMessageStripe = (
|
|
684
|
+
<ToggleButton
|
|
685
|
+
icon={"sap-icon://thumb-down"}
|
|
686
|
+
tooltip={this.resourceBundle.getText("C_EASY_FILTER_THUMBS_DOWN")}
|
|
687
|
+
type={"Transparent"}
|
|
688
|
+
press={(): void => {
|
|
689
|
+
return this.onThumbDownPressed();
|
|
690
|
+
}}
|
|
691
|
+
enabled={bindState(this.state, "thumbButtonEnabled")}
|
|
692
|
+
pressed={bindState(this.state, "thumbDownButtonPressed")}
|
|
693
|
+
/>
|
|
694
|
+
);
|
|
695
|
+
FESRHelper.setSemanticStepname(thumbDownButtonMessageStripe, "press", "fe4:eft:ms:thumbDown");
|
|
617
696
|
const outVBox = (
|
|
618
697
|
<VBox>
|
|
619
698
|
<FlexBox renderType="Bare">
|
|
@@ -689,6 +768,9 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
689
768
|
}
|
|
690
769
|
}}
|
|
691
770
|
</Tokenizer>
|
|
771
|
+
<HBox>
|
|
772
|
+
{thumbUpButtonTokenizer}, {thumbDownButtonTokenizer}
|
|
773
|
+
</HBox>
|
|
692
774
|
<Button
|
|
693
775
|
text={this.resourceBundle.getText("M_EASY_FILTER_RESET")}
|
|
694
776
|
type={ButtonType.Transparent}
|
|
@@ -713,18 +795,21 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
713
795
|
}}
|
|
714
796
|
></MessageStrip>
|
|
715
797
|
</FlexBox>
|
|
716
|
-
<FlexBox renderType="Bare">
|
|
798
|
+
<FlexBox renderType="Bare" class={"sapFeControlsGap8px"}>
|
|
717
799
|
<MessageStrip
|
|
718
|
-
type={
|
|
800
|
+
type={bindState(this.state, "messageStripType")}
|
|
719
801
|
text={bindState(this.state, "messageStripText")}
|
|
720
802
|
showIcon={true}
|
|
721
803
|
enableFormattedText={true}
|
|
722
|
-
visible={bindState(this.state, "showMessageStrip")}
|
|
723
804
|
showCloseButton={true}
|
|
724
805
|
close={(): void => {
|
|
725
|
-
this.
|
|
806
|
+
this.clearMessageStrip();
|
|
726
807
|
}}
|
|
808
|
+
visible={bindState(this.state, "showMessageStrip")}
|
|
727
809
|
></MessageStrip>
|
|
810
|
+
<HBox visible={bindState(this.state, "showMessageStrip")}>
|
|
811
|
+
{thumbUpButtonMessageStripe}, {thumbDownButtonMessageStripe}
|
|
812
|
+
</HBox>
|
|
728
813
|
</FlexBox>
|
|
729
814
|
</VBox>
|
|
730
815
|
) as VBox;
|
|
@@ -757,6 +842,7 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
757
842
|
//Set the Value States of all the Tokens back to None
|
|
758
843
|
this.tokenizer.current?.getTokens().forEach((token) => token.setProperty("valueState", ValueState.None));
|
|
759
844
|
this.tokenizer.current?.getTokens().forEach((token) => token.setProperty("valueStateText", null));
|
|
845
|
+
this.clearMessageStrip(); //clear the message strip for validated filters
|
|
760
846
|
}
|
|
761
847
|
|
|
762
848
|
//The below code updates the existing state by fetching the key and selectedValues
|