requiredValidation.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. import type { FormKitNode, FormKitProps } from '@formkit/core'
  3. const addRequired = (props: Partial<FormKitProps>) => {
  4. const { validation } = props
  5. if (Array.isArray(validation)) {
  6. validation.push(['required'])
  7. return
  8. }
  9. if (!validation) {
  10. props.validation = 'required'
  11. return
  12. }
  13. if (!validation.includes('required')) {
  14. props.validation = `${validation}|required`
  15. }
  16. }
  17. const removeRequired = (props: Partial<FormKitProps>) => {
  18. const { validation } = props
  19. if (!validation) return
  20. if (Array.isArray(validation)) {
  21. props.validation = validation.filter(([rule]) => rule !== 'required')
  22. return
  23. }
  24. if (validation.includes('required')) {
  25. props.validation = validation
  26. .split('|')
  27. .filter((rule: string) => !rule.includes('required'))
  28. .join('|')
  29. }
  30. }
  31. const addRequiredValidation = (node: FormKitNode) => {
  32. const { props, context } = node
  33. if (!props.definition || !context || node.type !== 'input') return
  34. node.addProps(['required'])
  35. if (props.required) {
  36. addRequired(props)
  37. }
  38. node.on('prop:required', ({ payload }) => {
  39. if (payload) {
  40. addRequired(props)
  41. } else {
  42. removeRequired(props)
  43. }
  44. })
  45. }
  46. export default addRequiredValidation