Skip to content
Snippets Groups Projects
Commit 6059b0b9 authored by Alexander Rose's avatar Alexander Rose
Browse files

add ValueCell.updateIfChanged

parent 99d2b1d4
No related branches found
No related tags found
No related merge requests found
...@@ -161,19 +161,11 @@ export default function Spacefill(): UnitsRepresentation<SpacefillProps> { ...@@ -161,19 +161,11 @@ export default function Spacefill(): UnitsRepresentation<SpacefillProps> {
createColors(currentGroup, vertexMap, newProps.colorTheme, spheres.values) createColors(currentGroup, vertexMap, newProps.colorTheme, spheres.values)
} }
// TODO handle in a generic way ValueCell.updateIfChanged(spheres.values.uAlpha, newProps.alpha)
if (spheres.values.uAlpha.ref.value !== newProps.alpha) { ValueCell.updateIfChanged(spheres.values.dDoubleSided, newProps.doubleSided)
ValueCell.update(spheres.values.uAlpha, newProps.alpha) ValueCell.updateIfChanged(spheres.values.dFlipSided, newProps.flipSided)
} ValueCell.updateIfChanged(spheres.values.dFlatShaded, newProps.flatShaded)
if (spheres.values.dDoubleSided.ref.value !== newProps.doubleSided) {
ValueCell.update(spheres.values.dDoubleSided, newProps.doubleSided)
}
if (spheres.values.dFlipSided.ref.value !== newProps.flipSided) {
ValueCell.update(spheres.values.dFlipSided, newProps.flipSided)
}
if (spheres.values.dFlatShaded.ref.value !== newProps.flatShaded) {
ValueCell.update(spheres.values.dFlatShaded, newProps.flatShaded)
}
spheres.state.visible = newProps.visible spheres.state.visible = newProps.visible
spheres.state.depthMask = newProps.depthMask spheres.state.depthMask = newProps.depthMask
......
...@@ -30,6 +30,8 @@ export function arrayEqual<T>(arr1: T[], arr2: T[]) { ...@@ -30,6 +30,8 @@ export function arrayEqual<T>(arr1: T[], arr2: T[]) {
return true return true
} }
const hasOwnProperty = Object.prototype.hasOwnProperty;
export function deepEqual(a: any, b: any) { export function deepEqual(a: any, b: any) {
// from https://github.com/epoberezkin/fast-deep-equal MIT // from https://github.com/epoberezkin/fast-deep-equal MIT
if (a === b) return true; if (a === b) return true;
...@@ -62,7 +64,7 @@ export function deepEqual(a: any, b: any) { ...@@ -62,7 +64,7 @@ export function deepEqual(a: any, b: any) {
if (regexpA !== regexpB) return false if (regexpA !== regexpB) return false
for (let i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false if (!hasOwnProperty.call(b, keys[i])) return false
} }
for (let i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
...@@ -75,8 +77,6 @@ export function deepEqual(a: any, b: any) { ...@@ -75,8 +77,6 @@ export function deepEqual(a: any, b: any) {
return false return false
} }
const hasOwnProperty = Object.prototype.hasOwnProperty;
export function shallowEqual<T>(a: T, b: T) { export function shallowEqual<T>(a: T, b: T) {
if (!a) { if (!a) {
if (!b) return true; if (!b) return true;
...@@ -170,7 +170,7 @@ function _shallowMerge<T>(source: T) { ...@@ -170,7 +170,7 @@ function _shallowMerge<T>(source: T) {
return ret; return ret;
} }
export const merge: (<T>(source: T, ...rest: Partial<T>[]) => T)= _shallowMerge; export const merge: (<T>(source: T, ...rest: Partial<T>[]) => T) = _shallowMerge;
function padTime(n: number) { return (n < 10 ? '0' : '') + n } function padTime(n: number) { return (n < 10 ? '0' : '') + n }
export function formatTime(d: Date) { export function formatTime(d: Date) {
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
* *
* @author David Sehnal <david.sehnal@gmail.com> * @author David Sehnal <david.sehnal@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/ */
import { idFactory } from './id-factory' import { idFactory } from './id-factory'
...@@ -55,6 +56,11 @@ namespace ValueCell { ...@@ -55,6 +56,11 @@ namespace ValueCell {
export function set<T, D>(cell: ValueCell<T, D>, box: ValueBox<T, D>): ValueCell<T, D> { export function set<T, D>(cell: ValueCell<T, D>, box: ValueBox<T, D>): ValueCell<T, D> {
return ValueRef.set(cell, box); return ValueRef.set(cell, box);
} }
/** Updates the cell if the value is has changed, comparing by reference */
export function updateIfChanged<T, D>(cell: ValueCell<T, D>, value: T): ValueCell<T, D> {
return cell.ref.value !== value ? update(cell, value) : cell
}
} }
export { ValueRef, ValueBox, ValueCell }; export { ValueRef, ValueBox, ValueCell };
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment