fix: prevent value empty string on slider right panel (#3635)

* fix: prevent value empty string on slider right panel

* chore: add build joi into test electron linter
This commit is contained in:
Faisal Amir 2024-09-12 09:45:46 +07:00 committed by GitHub
parent 5217437912
commit 2599f31115
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 9 deletions

View File

@ -37,7 +37,6 @@ on:
- '!README.md'
jobs:
base_branch_cov:
runs-on: ubuntu-latest
continue-on-error: true
@ -54,6 +53,7 @@ jobs:
run: |
yarn
yarn build:core
yarn build:joi
- name: Run test coverage
run: yarn test:coverage
@ -364,10 +364,10 @@ jobs:
uses: barecheck/code-coverage-action@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
lcov-file: "./coverage/lcov.info"
base-lcov-file: "./lcov.info"
lcov-file: './coverage/lcov.info'
base-lcov-file: './lcov.info'
send-summary-comment: true
show-annotations: "warning"
show-annotations: 'warning'
test-on-ubuntu-pr-target:
runs-on: [self-hosted, Linux, ubuntu-desktop]

View File

@ -67,26 +67,39 @@ describe('SliderRightPanel', () => {
it('calls onValueChanged with max value when input exceeds max', () => {
defaultProps.onValueChanged = jest.fn()
const { getByRole } = render(<SliderRightPanel {...defaultProps} />)
const input = getByRole('textbox')
const input = getByRole('textbox') as HTMLInputElement
fireEvent.change(input, { target: { value: '150' } })
fireEvent.focusOut(input)
expect(defaultProps.onValueChanged).toHaveBeenCalledWith(100)
expect(input.value).toEqual('100')
})
it('calls onValueChanged with min value when input is below min', () => {
defaultProps.onValueChanged = jest.fn()
const { getByRole } = render(<SliderRightPanel {...defaultProps} />)
const input = getByRole('textbox')
const input = getByRole('textbox') as HTMLInputElement
fireEvent.change(input, { target: { value: '0' } })
fireEvent.focusOut(input)
expect(defaultProps.onValueChanged).toHaveBeenCalledWith(0)
expect(input.value).toEqual('0')
})
it('calls onValueChanged when input value is empty string', () => {
defaultProps.onValueChanged = jest.fn()
const { getByRole } = render(<SliderRightPanel {...defaultProps} />)
const input = getByRole('textbox') as HTMLInputElement
fireEvent.change(input, { target: { value: '' } })
fireEvent.focusOut(input)
expect(defaultProps.onValueChanged).toHaveBeenCalledWith(0)
expect(input.value).toEqual('0')
})
it('does not call onValueChanged when input is invalid', () => {
defaultProps.onValueChanged = jest.fn()
const { getByRole } = render(<SliderRightPanel {...defaultProps} />)
const input = getByRole('textbox')
const input = getByRole('textbox') as HTMLInputElement
fireEvent.change(input, { target: { value: 'invalid' } })
expect(defaultProps.onValueChanged).not.toHaveBeenCalledWith(0)
expect(input.value).toEqual('50')
})
})

View File

@ -80,7 +80,10 @@ const SliderRightPanel = ({
onValueChanged?.(Number(max))
setVal(max.toString())
setShowTooltip({ max: true, min: false })
} else if (Number(e.target.value) < Number(min)) {
} else if (
Number(e.target.value) < Number(min) ||
!e.target.value.length
) {
onValueChanged?.(Number(min))
setVal(min.toString())
setShowTooltip({ max: false, min: true })
@ -92,7 +95,10 @@ const SliderRightPanel = ({
// Which is incorrect
if (Number(e.target.value) > Number(max)) {
setVal(max.toString())
} else if (Number(e.target.value) < Number(min)) {
} else if (
Number(e.target.value) < Number(min) ||
!e.target.value.length
) {
setVal(min.toString())
} else if (Number.isNaN(Number(e.target.value))) return