@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.
Files changed (67) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/controls/.library +1 -1
  3. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +97 -19
  4. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +113 -27
  5. package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +28 -28
  6. package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +41 -34
  7. package/src/sap/fe/controls/easyFilter/PXFeedback.js +26 -0
  8. package/src/sap/fe/controls/easyFilter/PXFeedback.ts +14 -0
  9. package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +22 -2
  10. package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.ts +34 -1
  11. package/src/sap/fe/controls/inlineEdit/InlineEditIndicator.js +1 -2
  12. package/src/sap/fe/controls/inlineEdit/InlineEditIndicator.tsx +0 -1
  13. package/src/sap/fe/controls/library.js +1 -1
  14. package/src/sap/fe/controls/messagebundle.properties +7 -3
  15. package/src/sap/fe/controls/messagebundle_ar.properties +4 -2
  16. package/src/sap/fe/controls/messagebundle_bg.properties +4 -2
  17. package/src/sap/fe/controls/messagebundle_ca.properties +4 -2
  18. package/src/sap/fe/controls/messagebundle_cnr.properties +4 -2
  19. package/src/sap/fe/controls/messagebundle_cs.properties +4 -2
  20. package/src/sap/fe/controls/messagebundle_cy.properties +4 -2
  21. package/src/sap/fe/controls/messagebundle_da.properties +4 -2
  22. package/src/sap/fe/controls/messagebundle_de.properties +8 -6
  23. package/src/sap/fe/controls/messagebundle_el.properties +4 -2
  24. package/src/sap/fe/controls/messagebundle_en.properties +4 -2
  25. package/src/sap/fe/controls/messagebundle_en_GB.properties +4 -2
  26. package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +4 -2
  27. package/src/sap/fe/controls/messagebundle_es.properties +4 -2
  28. package/src/sap/fe/controls/messagebundle_es_MX.properties +4 -2
  29. package/src/sap/fe/controls/messagebundle_et.properties +4 -2
  30. package/src/sap/fe/controls/messagebundle_fi.properties +4 -2
  31. package/src/sap/fe/controls/messagebundle_fr.properties +5 -3
  32. package/src/sap/fe/controls/messagebundle_fr_CA.properties +4 -2
  33. package/src/sap/fe/controls/messagebundle_hi.properties +4 -2
  34. package/src/sap/fe/controls/messagebundle_hr.properties +4 -2
  35. package/src/sap/fe/controls/messagebundle_hu.properties +4 -2
  36. package/src/sap/fe/controls/messagebundle_id.properties +4 -2
  37. package/src/sap/fe/controls/messagebundle_it.properties +4 -2
  38. package/src/sap/fe/controls/messagebundle_iw.properties +4 -2
  39. package/src/sap/fe/controls/messagebundle_ja.properties +4 -2
  40. package/src/sap/fe/controls/messagebundle_kk.properties +4 -2
  41. package/src/sap/fe/controls/messagebundle_ko.properties +4 -2
  42. package/src/sap/fe/controls/messagebundle_lt.properties +4 -2
  43. package/src/sap/fe/controls/messagebundle_lv.properties +4 -2
  44. package/src/sap/fe/controls/messagebundle_mk.properties +4 -2
  45. package/src/sap/fe/controls/messagebundle_ms.properties +4 -2
  46. package/src/sap/fe/controls/messagebundle_nl.properties +4 -2
  47. package/src/sap/fe/controls/messagebundle_no.properties +4 -2
  48. package/src/sap/fe/controls/messagebundle_pl.properties +4 -2
  49. package/src/sap/fe/controls/messagebundle_pt.properties +4 -2
  50. package/src/sap/fe/controls/messagebundle_pt_PT.properties +4 -2
  51. package/src/sap/fe/controls/messagebundle_ro.properties +4 -2
  52. package/src/sap/fe/controls/messagebundle_ru.properties +4 -2
  53. package/src/sap/fe/controls/messagebundle_sh.properties +4 -2
  54. package/src/sap/fe/controls/messagebundle_sk.properties +4 -2
  55. package/src/sap/fe/controls/messagebundle_sl.properties +4 -2
  56. package/src/sap/fe/controls/messagebundle_sr.properties +4 -2
  57. package/src/sap/fe/controls/messagebundle_sv.properties +4 -2
  58. package/src/sap/fe/controls/messagebundle_th.properties +4 -2
  59. package/src/sap/fe/controls/messagebundle_tr.properties +4 -2
  60. package/src/sap/fe/controls/messagebundle_uk.properties +4 -2
  61. package/src/sap/fe/controls/messagebundle_vi.properties +4 -2
  62. package/src/sap/fe/controls/messagebundle_zh_CN.properties +4 -2
  63. package/src/sap/fe/controls/messagebundle_zh_TW.properties +4 -2
  64. package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +38 -4
  65. package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.tsx +37 -3
  66. package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +8 -1
  67. 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, Success } from "ux/eng/fioriai/reuse/easyfilter/EasyFilter";
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.clearMessageStripForValidatedFilters();
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.setMessageStripForValidatedFilters.bind(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
- clearMessageStripForValidatedFilters(): void {
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
- setMessageStripForValidatedFilters(text: string): void {
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={MessageType.Error}
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.clearMessageStripForValidatedFilters();
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