UNPKG

jenesius-vue-form

Version:

Heavy form system for Vue.js

47 lines (46 loc) 4.19 kB
export interface CompareItem { name: string; oldValue: any; newValue: any; } /** * @description Вернёт массив: результат сравнения. Результат сравнения из себя представляет название поля, которые * отличаются от исходного объекта. Если поле N присутствует в newValue и присутствует в объекте oldValue и его значение * в этих объектах идентичное - данное поле не будет возвращено в результате работы данной функции. В любых иных случаях: * В новом объекте поле есть, а в старом нет (поле было добавлено) или в старом объекте поле есть, а в новом нет (поле * было удалено) - поле будет выведено в результате. * * @problem Что произойдёт если во вложенном объекте будет изменение? В таком случае мы всё-равно генерируем event * в котором уведомляем, что всё значение было изменено. Это не проблема. Если один из дочерних элементов был изменён, то * и родительский тоже. Дальше можно рекурсивно пройтись и узнать что именно было изменено. В худшем случае можно расширить * CompareItem и добавить туда difference: [], с массивом изменённых полей. * * @param {Object} newValue объект новых(исходных) значений * @param {Object} oldValue объект старых значений */ export declare function compareDifference(oldValue: unknown, newValue: unknown): CompareItem[]; /** * * * @param sourceValue Исходные объект * @param changes Изменения, которые были внесены в исходный объект. * @description В отличии от предыдущей функции, данная функция принимает изменения и объект, на который будут * производиться изменения. Из этого можно сделать вывод, что второй объект необходим лишь для двух вещей: * 1. Было ли поле изменено. В случае, если в изменениях пришло {name: "J"}, а в объекте и так было поле {name: "J"}, то * данное поле не будет помечено, как изменённое. * 2. Чтобы получить старое значение. (oldValue) * То есть мы уже имеем набор изменений, на полноценное сравнивать два объекта не надо, а лишь надо спроецировать первый * (изменения) на второй и сравнить, какие именно изменения будут произведены. * * Также нужно помнить, что изменения лишь проецируются на исходные значения. Иными словами, если * исходные значения {coordinate: {x: 1}} * изменения: {coordinate: {y: 2}} * результирующий объект(который предполагается): { coordinate: { x: 1, y: 2 } } * и в данном случае мы получаем, что у нас два изменения: * [ * { name: 'coordinate', newValue: { x: 1, y: 2 }, oldValue: { x: 1 } }, * { name: 'coordinate.y', newValue: 2, oldValue: undefined } * ] * */ export declare function compareMergeChanges(sourceValue: any, changes: any): CompareItem[]; export declare function compareDTO(name: string, newValue: any, oldValue: any): CompareItem;