useObjectAttributeFormFields.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. import type {
  3. EnumObjectManagerObjects,
  4. ObjectManagerFrontendAttribute,
  5. } from '@shared/graphql/types'
  6. import type { FormSchemaField } from '@shared/components/Form/types'
  7. import { useObjectAttributesStore } from '../stores/objectAttributes'
  8. import { transformResolvedFieldForScreen } from '../form/getFieldFromAttribute'
  9. export const useObjectAttributeFormFields = (skippedFields: string[] = []) => {
  10. const { getObjectAttributesForObject } = useObjectAttributesStore()
  11. const getFormFieldSchema = (
  12. name: string,
  13. object: EnumObjectManagerObjects,
  14. screen?: string,
  15. ) => {
  16. const objectAttributesObject = getObjectAttributesForObject(object)
  17. const resolvedField = (
  18. objectAttributesObject.formFieldAttributesLookup as unknown as Map<
  19. string,
  20. FormSchemaField
  21. >
  22. ).get(name)
  23. if (!screen) return resolvedField
  24. // We need to transform the resolved the field for the current screen (e.g. for the required information).
  25. const screenConfig = (
  26. objectAttributesObject.attributesLookup as unknown as Map<
  27. string,
  28. ObjectManagerFrontendAttribute
  29. >
  30. ).get(name)?.screens[screen]
  31. if (resolvedField && screenConfig) {
  32. transformResolvedFieldForScreen(screenConfig, resolvedField)
  33. }
  34. return resolvedField
  35. }
  36. const getFormFieldsFromScreen = (
  37. screen: string,
  38. object: EnumObjectManagerObjects,
  39. ) => {
  40. const screens = getObjectAttributesForObject(object)
  41. .screens as unknown as Record<string, string[]>
  42. if (!screens[screen]) return []
  43. const formFields: FormSchemaField[] = []
  44. screens[screen].forEach((attributeName) => {
  45. if (skippedFields.includes(attributeName)) {
  46. return
  47. }
  48. const formField = getFormFieldSchema(attributeName, object, screen)
  49. if (!formField) {
  50. return
  51. }
  52. formFields.push(formField)
  53. })
  54. return formFields
  55. }
  56. return {
  57. getFormFieldSchema,
  58. getFormFieldsFromScreen,
  59. }
  60. }