fieldNamesBehavior.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. export const getDefaultFieldNames = () => ({
  2. label: 'label',
  3. value: 'value',
  4. children: 'children',
  5. disabled: 'disabled',
  6. })
  7. export const fieldNamesProps = {
  8. defaultFieldNames: {
  9. type: Object,
  10. value: getDefaultFieldNames(),
  11. },
  12. }
  13. export const setFieldNames = (fieldNames = {}) => {
  14. return {
  15. ...getDefaultFieldNames(),
  16. ...fieldNames,
  17. }
  18. }
  19. export default Behavior({
  20. properties: { ...fieldNamesProps },
  21. data: {
  22. useFieldNames: false,
  23. fieldNames: getDefaultFieldNames(),
  24. },
  25. definitionFilter(defFields) {
  26. Object.assign(defFields.data = (defFields.data || {}), {
  27. fieldNames: getDefaultFieldNames(),
  28. })
  29. Object.assign(defFields.methods = (defFields.methods || {}), {
  30. getFieldNames() {
  31. const props = this.data
  32. return props.useFieldNames
  33. ? props.fieldNames
  34. : props.defaultFieldNames
  35. },
  36. getFieldName(name) {
  37. return this.getFieldNames()[name]
  38. },
  39. })
  40. },
  41. lifetimes: {
  42. attached() {
  43. const props = this.data
  44. this.setData({
  45. useFieldNames: true,
  46. fieldNames: setFieldNames(props.defaultFieldNames),
  47. })
  48. },
  49. },
  50. })