import { uniqWith } from "lodash";
import { mapGetters } from "vuex";
/**
* Removes duplicate values in a set and returns unique values
* @returns {Array} Array with non-duplicate values
*/
const uniqueValues = (item) => {
let merged = uniqWith(item, (pre, cur) => {
if (pre.identifier === cur.identifier) {
cur["value"] = cur["value"] + "," + pre["value"];
//Combine string values from different text-fields in same set and convert in into array
/*istanbul ignore else */
if (typeof cur["value"] === "string") {
cur["value"] = cur["value"].split(",");
}
//Remove duplicates and create unique array
cur["value"] = [...new Set(cur["value"])];
return true;
}
return false;
});
return merged;
};
/**
* Removes an item from the array
* @param item
* @param arrayList
* @returns {Array} - updated array without the item
*/
const removeItem = (item, arrayList) => {
const index = arrayList.indexOf(item);
if (index >= 0) arrayList.splice(index, 1);
};
/**
* Mixin to filter the records types based on the registry
* {{computed: {getRecordTypes: Computed}, methods: {filteredRecordTypes(*): *[]}}}
* @param {String} registryname
* @return {Array} - recordTypes filtered by registryname
*/
const recordTypes = {
computed: {
...mapGetters("recordTypes", ["getRecordTypes"]),
},
methods: {
filteredRecordTypes(registry) {
let filteredRecordTypes = [];
this.getRecordTypes.filter(({ name, fairsharingRegistry }) => {
if (fairsharingRegistry["name"] === registry) {
filteredRecordTypes.push(name);
}
});
return filteredRecordTypes;
},
},
};
export { recordTypes, removeItem, uniqueValues };