• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / codegate-ui / 13903674755

17 Mar 2025 03:42PM UTC coverage: 61.874% (-4.6%) from 66.452%
13903674755

Pull #345

github

web-flow
Merge ce2550358 into 5d463ef04
Pull Request #345: feat: react-hook-form field array for provider muxes

443 of 798 branches covered (55.51%)

Branch coverage included in aggregate %.

63 of 93 new or added lines in 21 files covered. (67.74%)

50 existing lines in 4 files now uncovered.

904 of 1379 relevant lines covered (65.55%)

36.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/features/workspace/hooks/use-muxing-rules-form-workspace.ts
1
import { MuxMatcherType, MuxRule, ProviderType } from '@/api/generated'
2
import { useFormState } from '@/hooks/useFormState'
3
import { isEqual } from 'lodash'
4
import { useCallback, useEffect, useRef } from 'react'
5
import { v4 as uuidv4 } from 'uuid'
6

7
export type PreferredMuxRule = Omit<MuxRule, 'provider_type'> & {
8
  provider_type: ProviderType | undefined
9
} & { id: string }
10

11
type MuxingRulesFormState = {
12
  rules: PreferredMuxRule[]
13
}
14

UNCOV
15
const DEFAULT_STATE: PreferredMuxRule = {
×
16
  id: uuidv4(),
17
  provider_name: '',
18
  provider_type: undefined,
19
  model: '',
20
  matcher: '',
21
  matcher_type: MuxMatcherType.CATCH_ALL,
22
}
23

UNCOV
24
export const useMuxingRulesFormState = (initialValues: MuxRule[]) => {
×
UNCOV
25
  const formState = useFormState<MuxingRulesFormState>({
×
26
    rules: [{ ...DEFAULT_STATE, id: uuidv4() }],
27
  })
UNCOV
28
  const { values, updateFormValues, setInitialValues } = formState
×
UNCOV
29
  const lastValuesRef = useRef(values.rules)
×
30

UNCOV
31
  useEffect(() => {
×
32
    const newValues =
UNCOV
33
      initialValues.length === 0
×
34
        ? [DEFAULT_STATE]
35
        : initialValues.map((item) => ({ ...item, id: uuidv4() }))
×
36

UNCOV
37
    if (!isEqual(lastValuesRef.current, newValues)) {
×
UNCOV
38
      lastValuesRef.current = newValues
×
UNCOV
39
      setInitialValues({ rules: newValues })
×
40
    }
41
  }, [initialValues, setInitialValues])
42

UNCOV
43
  const addRule = useCallback(() => {
×
UNCOV
44
    const newRules = [
×
45
      ...values.rules.slice(0, values.rules.length - 1),
46
      {
47
        ...DEFAULT_STATE,
48
        matcher_type: MuxMatcherType.FILENAME_MATCH,
49
        id: uuidv4(),
50
      },
51
      ...values.rules.slice(values.rules.length - 1),
52
    ]
UNCOV
53
    updateFormValues({
×
54
      rules: newRules,
55
    })
56
  }, [updateFormValues, values.rules])
57

UNCOV
58
  const setRules = useCallback(
×
59
    (rules: PreferredMuxRule[]) => {
60
      updateFormValues({ rules })
×
61
    },
62
    [updateFormValues]
63
  )
64

UNCOV
65
  const setRuleItem = useCallback(
×
66
    (rule: PreferredMuxRule) => {
UNCOV
67
      updateFormValues({
×
UNCOV
68
        rules: values.rules.map((item) => (item.id === rule.id ? rule : item)),
×
69
      })
70
    },
71
    [updateFormValues, values.rules]
72
  )
73

UNCOV
74
  const removeRule = useCallback(
×
75
    (ruleIndex: number) => {
76
      updateFormValues({
×
77
        rules: values.rules.filter((_, index) => index !== ruleIndex),
×
78
      })
79
    },
80
    [updateFormValues, values.rules]
81
  )
82

UNCOV
83
  return { addRule, setRules, setRuleItem, removeRule, values, formState }
×
84
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc