formUpdaterTrigger.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. import type { FormKitNode } from '@formkit/core'
  3. import type { FormUpdaterTrigger } from '../../types/form.ts'
  4. const formUpdaterTrigger = (
  5. defaultTrigger: FormUpdaterTrigger = 'direct',
  6. defaultTriggerDelay = 300,
  7. ) => {
  8. return (node: FormKitNode) => {
  9. const { props } = node
  10. node.addProps([
  11. 'triggerFormUpdater',
  12. 'formUpdaterTrigger',
  13. 'pendingValueUpdate',
  14. ])
  15. node.on('created', () => {
  16. if (!props.formUpdaterTrigger) {
  17. props.formUpdaterTrigger = defaultTrigger
  18. }
  19. if (
  20. props.triggerFormUpdater &&
  21. props.formUpdaterTrigger === 'delayed' &&
  22. (!props.delay || props.delay < defaultTriggerDelay)
  23. ) {
  24. props.delay = defaultTriggerDelay
  25. }
  26. const { context } = node
  27. if (!context) return
  28. // Reset pending value update prop if needed.
  29. node.hook.input((payload, next) => {
  30. if (context.pendingValueUpdate) context.pendingValueUpdate = false
  31. return next(payload)
  32. })
  33. })
  34. }
  35. }
  36. export default formUpdaterTrigger