Skip to content
Next Next commit
Update custom attributes container proposal to account for attributes…
… with multiple values
  • Loading branch information
melnikovi committed Oct 20, 2020
commit 11be87644c6db104e1b79f848af646d76ea36398
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,41 @@ One workaround for "getting all fields" is based on schema introspection, it all

# Proposed solution

To account for dynamic nature of EAV attributes and the need of "getting all fields" in product search queries, `custom_attributes: [CustomAttribute]!` container will be introduced.
To account for dynamic nature of EAV attributes and the need of "getting all fields" in product search queries,we can introduce `custom_attributes: [CustomAttribute]!` container.

```graphql
type CustomAttribute {
Copy link
Member

@mslabko mslabko Oct 20, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we have to add "type" opinion here to be able to render the appropriate template (datetime, text, multi-select, checkbox ...)

E.g.

"attributes":[
    {
      "code":"multiselect_attribute",
      "type":"multiselect",
      "values":[
            "Option 1",
            "Option 2"
      ]
    }
  ]

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Attributes are going to be displayed as information and not as fields you can control, so I don't think it's necessary.

Copy link
Member

@mslabko mslabko Oct 22, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it will be useful to render field properly on UI without complex logic. E.g. for "Date" field - "10-11-2020"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, they are needed for the forms

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have this data already available in the scope of customAttributeMetadata query. Since update frequency for attribute metadata and product attribute values is different, it makes sense to separate them to avoid excessive payload size.

code: String!
value: [String]! # We want to account fo attributes that have single (text, dropdown) and multiple values (checkbox, multiselect)
}

# We could also make value complex type to be able add more fields in the future
type CustomAttribute {
code: String!
value: [CustomAttributeValue]!
}

type CustomAttributeValue {
value: String!
}
```

Alternative approach would be is to introduce an interface `custom_attributes: [CustomAttributeInterface]!`.

```graphql
type CustomAttributeInterface {
code: String!
}

type CustomAttribute extends CustomAttributeInterface {
value: CustomAttributeValue!
}

type CustomAttributeMulti extends CustomAttributeInterface {
values: [CustomAttributeValue]!
}

type CustomAttributeValue {
value: String!
}
```
Expand Down