"use strict"; // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. Object.defineProperty(exports, "__esModule", { value: true }); exports.collectionRemoveItem = exports.collectionAddItem = exports.collectionReplaceItem = exports.collectionToArray = exports.collectionFromArray = void 0; exports.isArrayOf = isArrayOf; exports.isStringArray = isStringArray; exports.isRecordOf = isRecordOf; function isArrayOf(v, check) { if (!Array.isArray(v)) { return false; } return v.every(check); } function isStringArray(v) { return isArrayOf(v, (e) => typeof e === 'string'); } function isRecordOf(v, check) { if (typeof v !== 'object' || !v) { return false; } if (!(Object.keys(v).every((k) => typeof k === 'string'))) { return false; } if (!(Object.values(v).every(check))) { return false; } return true; } const collectionFromArray = (arr = []) => { return arr.reduce((current, item) => { current.data = Object.assign(Object.assign({}, current.data), { [item.id]: item }); current.order.push(item.id); return current; }, { data: {}, order: [] }); }; exports.collectionFromArray = collectionFromArray; const collectionToArray = ({ data, order }) => { return order.map((id) => data[id]); }; exports.collectionToArray = collectionToArray; const collectionReplaceItem = (collection, item) => { return Object.assign(Object.assign({}, collection), { data: Object.assign(Object.assign({}, collection.data), { [item.id]: item }) }); }; exports.collectionReplaceItem = collectionReplaceItem; const collectionAddItem = (collection, item) => { return Object.assign(Object.assign({}, collection), { data: Object.assign(Object.assign({}, collection.data), { [item.id]: item }), order: [...collection.order, item.id] }); }; exports.collectionAddItem = collectionAddItem; const collectionRemoveItem = (collection, item) => { const data = Object.assign({}, collection.data); Reflect.deleteProperty(data, item.id); const order = collection.order.filter((id) => id !== item.id); return Object.assign(Object.assign({}, collection), { data, order }); }; exports.collectionRemoveItem = collectionRemoveItem;