Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
137f28f
feat: add display and value format properties
GDamyanov Feb 12, 2026
68ef7f3
feat: add sample
GDamyanov Feb 12, 2026
65aba10
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 12, 2026
8bdab58
fix: fix sample
GDamyanov Feb 12, 2026
149fab0
refactor: update properties role
GDamyanov Feb 13, 2026
6895068
fix: refactor code
GDamyanov Feb 13, 2026
7d2b118
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 13, 2026
1a5a4f7
fix: update validation logic against value format
GDamyanov Feb 13, 2026
3309cb0
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 17, 2026
2a7b351
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 18, 2026
2c8f869
fix: samples
GDamyanov Feb 18, 2026
c3323c1
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 18, 2026
d24212f
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 23, 2026
06bf844
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 26, 2026
2a6d3c1
fix: address review comments
GDamyanov Feb 26, 2026
28aac74
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 27, 2026
a4b071a
Merge branch 'main' into timepicker-display-value-format
GDamyanov Feb 27, 2026
fb3bc23
fix: remove live value
GDamyanov Mar 4, 2026
5808101
Merge branch 'main' into timepicker-display-value-format
GDamyanov Mar 4, 2026
b9c7103
feat: remove unproper check
GDamyanov Mar 4, 2026
d1fbea4
fix: set correct condition for _valueFormat
GDamyanov Mar 4, 2026
26a5467
fix: fix tests
GDamyanov Mar 4, 2026
c258d32
Merge branch 'main' into timepicker-display-value-format
GDamyanov Mar 4, 2026
6f1731b
merge main
GDamyanov Mar 6, 2026
4cbd50d
remove file
GDamyanov Mar 6, 2026
c53ce79
docs: add sample
GDamyanov Mar 6, 2026
b698f0f
test
GDamyanov Mar 6, 2026
bf085a6
Merge branch 'main' into timepicker-display-value-format
GDamyanov Mar 6, 2026
43c7381
docs: remove not needed sample
GDamyanov Mar 6, 2026
c8270af
Merge branch 'main' into timepicker-display-value-format
GDamyanov Mar 6, 2026
6d3a82d
fix: fix react sample
GDamyanov Mar 6, 2026
1616aab
Merge branch 'main' into timepicker-display-value-format
GDamyanov Mar 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions packages/main/cypress/specs/FormSupport.cy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -896,9 +896,9 @@ describe("Form support", () => {
it("ui5-time-picker in form", () => {
cy.mount(<form method="get">
<TimePicker id="time_picker1"></TimePicker>
<TimePicker id="time_picker2" value="1:10:10PM"></TimePicker>
<TimePicker id="time_picker3" name="time_picker3" required></TimePicker>
<TimePicker id="time_picker4" name="time_picker4" value="1:10:10PM" required></TimePicker>
<TimePicker id="time_picker2" value="1:10:10 PM"></TimePicker>
<TimePicker id="time_picker3" valueFormat="h:mm:ss a" name="time_picker3" required></TimePicker>
<TimePicker id="time_picker4" valueFormat="h:mm:ss a" name="time_picker4" value="1:10:10 PM" required></TimePicker>
<button type="submit">Submits forms</button>
</form>);

Expand Down Expand Up @@ -930,7 +930,7 @@ describe("Form support", () => {
.then($el => {
return getFormData($el.get(0));
})
.should("be.equal", "time_picker3=1:10:10PM&time_picker4=1:10:10PM");
.should("be.equal", "time_picker3=1:10:10 PM&time_picker4=1:10:10 PM");
});

it("Button's click doesn't submit form on prevent default", () => {
Expand Down
132 changes: 132 additions & 0 deletions packages/main/cypress/specs/TimePicker.cy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,138 @@ describe("TimePicker Tests", () => {
cy.get("@changeStub").should("have.been.calledThrice");
});

it("tests displayFormat and valueFormat - typing and blur", () => {
cy.mount(
<TimePicker
displayFormat="hh:mm:ss a"
valueFormat="HH:mm:ss"
value="14:30:00"
></TimePicker>
);

cy.get<TimePicker>("[ui5-time-picker]")
.as("timePicker");

// Check that display shows 12-hour format with AM/PM
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.should("have.value", "02:30:00 PM");

// Check that value attribute is in 24-hour format
cy.get<TimePicker>("@timePicker")
.should("have.value", "14:30:00");

// Type a new time in display format
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.realClick()
.should("be.focused")
.clear()
.realType("03:45:30 PM");

// While typing, value should show what user typed
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.should("have.value", "03:45:30 PM");

// Blur the input
cy.get("body").realClick();

// After blur, value attribute should be normalized to valueFormat (24-hour)
cy.get<TimePicker>("@timePicker")
.should("have.value", "15:45:30");

// Display should still show in displayFormat
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.should("have.value", "03:45:30 PM");
});

it("tests displayFormat and valueFormat - invalid input shows error", () => {
cy.mount(
<TimePicker
displayFormat="hh:mm a"
valueFormat="HH:mm:ss"
></TimePicker>
);

cy.get<TimePicker>("[ui5-time-picker]")
.as("timePicker");

// Type invalid time
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.realClick()
.should("be.focused")
.realType("99:99");

// Blur to trigger validation
cy.realPress("Tab");

// Should show error state
cy.get<TimePicker>("@timePicker")
.should("have.attr", "value-state", "Negative");

// Value should remain invalid
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.should("have.value", "99:99");
});

it("tests displayFormat and valueFormat - programmatic value setting", () => {
cy.mount(
<TimePicker
displayFormat="hh:mm a"
valueFormat="HH:mm:ss"
></TimePicker>
);

cy.get<TimePicker>("[ui5-time-picker]")
.as("timePicker");

// Set value programmatically in valueFormat
cy.get<TimePicker>("@timePicker")
.invoke("prop", "value", "16:45:00");

// Display should show in displayFormat
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.should("have.value", "04:45 PM");

// Value attribute should remain in valueFormat
cy.get<TimePicker>("@timePicker")
.should("have.value", "16:45:00");
});

it("tests valueFormat defaults to ISO format when not specified", () => {
cy.mount(
<TimePicker
displayFormat="hh:mm a"
></TimePicker>
);

cy.get<TimePicker>("[ui5-time-picker]")
.as("timePicker");

// Type in display format
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.realClick()
.should("be.focused")
.realType("02:30 PM");

cy.realPress("Tab");

// Value should default to ISO format (HH:mm:ss)
cy.get<TimePicker>("@timePicker")
.should("have.value", "14:30:00");

// But display should still be in displayFormat
cy.get<TimePicker>("@timePicker")
.ui5TimePickerGetInnerInput()
.should("have.value", "02:30 PM");
});

it("tests value state", () => {
cy.mount(<TimePicker></TimePicker>);

Expand Down
2 changes: 1 addition & 1 deletion packages/main/cypress/specs/TimePicker.mobile.cy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ describe("TimePicker on phone - general interactions", () => {
});

it("direct number typing", () => {
cy.mount(<TimePicker></TimePicker>);
cy.mount(<TimePicker value-format="hh:mm:ss a"></TimePicker>);

cy.get<TimePicker>("[ui5-time-picker]")
.as("timePicker")
Expand Down
Loading
Loading