@shopware-ag/meteor-admin-sdk
Version:
The Meteor SDK for the Shopware Administration.
76 lines • 3.26 kB
JavaScript
import { hasType } from '../utils';
import Criteria from '../../data/Criteria';
/* eslint-disable */
const CriteriaSerializer = () => ({
name: 'criteria',
serialize: ({ value, customizerMethod, seen, path }) => {
if (value instanceof Criteria) {
return {
__type__: '__Criteria__',
data: customizerMethod(value.getCriteriaData(), seen, path),
};
}
},
deserialize: ({ value, customizerMethod }) => {
// When object is containing a criteria wrapper
if (hasType('__Criteria__', value) && typeof value['data'] === 'object') {
// The original values
const serializedData = value.data;
// Create new criteria object
const deserializedCriteria = new Criteria();
// Hydrate the criteria with the orignal values
deserializedCriteria.setPage(serializedData.page);
deserializedCriteria.setLimit(serializedData.limit);
deserializedCriteria.setTerm(serializedData.term);
if (serializedData.title !== null) {
deserializedCriteria.setTitle(serializedData.title);
}
// @ts-expect-error
serializedData.filters.forEach((filter) => {
deserializedCriteria.addFilter(filter);
});
deserializedCriteria.setIds(serializedData.ids);
// @ts-expect-error
serializedData.queries.forEach(({ query, score }) => {
deserializedCriteria.addQuery(query, score);
});
// @ts-expect-error
serializedData.associations.forEach((association) => {
// Associations need also to be deserialized
deserializedCriteria.associations.push(customizerMethod(association));
});
// @ts-expect-error
serializedData.postFilter.forEach((filter) => {
deserializedCriteria.addPostFilter(filter);
});
// @ts-expect-error
serializedData.sortings.forEach((sorting) => {
deserializedCriteria.addSorting(sorting);
});
// @ts-expect-error
serializedData.aggregations.forEach((aggregation) => {
deserializedCriteria.addAggregation(aggregation);
});
// @ts-expect-error
serializedData.grouping.forEach((group) => {
deserializedCriteria.addGrouping(group);
});
// @ts-expect-error
serializedData.fields.forEach((field) => {
deserializedCriteria.addFields(field);
});
// @ts-expect-error
serializedData.groupFields.forEach((groupField) => {
deserializedCriteria.addGroupField(groupField);
});
if (serializedData.includes) {
deserializedCriteria.addIncludes(serializedData.includes);
}
deserializedCriteria.setTotalCountMode(serializedData.totalCountMode);
// Return new Criteria object
return deserializedCriteria;
}
}
});
export default CriteriaSerializer;
//# sourceMappingURL=criteria-serializer.js.map