index.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. import { password as passwordDefinition } from '@formkit/inputs'
  3. import { cloneDeep } from 'lodash-es'
  4. import initializeFieldDefinition from '#shared/form/core/initializeFieldDefinition.ts'
  5. import formUpdaterTrigger from '#shared/form/features/formUpdaterTrigger.ts'
  6. import type { FormKitNode } from '@formkit/core'
  7. const localPasswordDefinition = cloneDeep(passwordDefinition)
  8. const switchPasswordVisibility = (node: FormKitNode) => {
  9. const { props } = node
  10. props.suffixIconClass = 'select-none cursor-pointer'
  11. props.suffixIcon = 'show'
  12. props.onSuffixIconClick = () => {
  13. props.type = props.type === 'password' ? 'text' : 'password'
  14. }
  15. node.on('prop:type', ({ payload, origin }) => {
  16. const { props } = origin
  17. props.suffixIcon = payload === 'password' ? 'show' : 'hide'
  18. })
  19. }
  20. initializeFieldDefinition(localPasswordDefinition, {
  21. features: [switchPasswordVisibility, formUpdaterTrigger('delayed')],
  22. })
  23. export default {
  24. fieldType: 'password',
  25. definition: localPasswordDefinition,
  26. }