# Attribute Vuex Store
Attribute Store is designed to handle all actions related to attributes management.
# State
state: {
list_by_code: {},
list_by_id: {},
labels: {}
},
As we're using the attributes dictionary for the product management in a very similar way as Magento (EAV model (opens new window)), we're operating on the attributes, attribute types, and dictionaries.
Attributes are explicitly loaded by the user by calling the attribute/list method. For example, when you're going to work with customizable attributes of the product, or to work on variants, you need to prefetch the attributes metadata:
this.$store.dispatch('attribute/list', {
filterValues: [true],
filterField: 'is_user_defined',
});
This is an example from product compare feature (opens new window).
The attribute state data:
list_by_code- This is a dictionary where you can get the specific attribute just by accessing thelist_by_code['color']etc.list_by_id- This is a dictionary where you can get the specific attribute just by accessing thelist_by_id[123]etc.labels- The preloaded labels of attribute values (the V in EAV).
# Actions
The attribute store provides the following public actions:
# `list (context, { filterValues = null, filterField = 'attribute_code', size = 150, start = 0 })``
This method is used to load the attributes metadata. filterValues is an array of multiple values like: ['color', 'size'] and the filterField is the attribute field to compare the filterValues against. Usually, it is a attribute_code or attribute_id. The size and start are just used to limit the list.
# Helpers
Attribute module exports one very popular helper method:
# export function optionLabel (state, { attributeKey, searchBy = 'code', optionId })
This is used to get the label for specific optionId. For example, when the user filters products and uses the 165 attribute_value we can call optionLabel( { attributeKey: 'color', optionId: 165 }) to get back 'Red' label.
# Getters
All state members should have been accessed only by getters. Please take a look at the state reference for data formats
export default {
attributeListByCode: state => state.list_by_code,
attributeListById: state => state.list_by_id,
};