(layout, newProps, dispatch)
| 459 | * but not for props nested inside children |
| 460 | */ |
| 461 | export function prunePersistence(layout, newProps, dispatch) { |
| 462 | const { |
| 463 | canPersist, |
| 464 | id, |
| 465 | props, |
| 466 | persistence, |
| 467 | persisted_props, |
| 468 | persistence_type, |
| 469 | element |
| 470 | } = getProps(layout); |
| 471 | |
| 472 | const getFinal = (propName, prevVal) => |
| 473 | propName in newProps ? newProps[propName] : prevVal; |
| 474 | const finalPersistence = getFinal('persistence', persistence); |
| 475 | |
| 476 | if (!canPersist || !(persistence || finalPersistence)) { |
| 477 | return newProps; |
| 478 | } |
| 479 | |
| 480 | const finalPersistenceType = getFinal('persistence_type', persistence_type); |
| 481 | const finalPersistedProps = getFinal('persisted_props', persisted_props); |
| 482 | const persistenceChanged = |
| 483 | finalPersistence !== persistence || |
| 484 | finalPersistenceType !== persistence_type || |
| 485 | finalPersistedProps !== persisted_props; |
| 486 | |
| 487 | const notInNewProps = persistedProp => |
| 488 | !(persistedProp.split('.')[0] in newProps); |
| 489 | |
| 490 | const update = {}; |
| 491 | |
| 492 | let depersistedProps = props; |
| 493 | |
| 494 | if (persistenceChanged && persistence) { |
| 495 | // clear previously-applied persistence |
| 496 | const storage = getStore(persistence_type, dispatch); |
| 497 | forEach( |
| 498 | persistedProp => |
| 499 | modProp( |
| 500 | getValsKey(id, persistedProp, persistence), |
| 501 | storage, |
| 502 | element, |
| 503 | props, |
| 504 | persistedProp, |
| 505 | update, |
| 506 | UNDO |
| 507 | ), |
| 508 | filter(notInNewProps, persisted_props) |
| 509 | ); |
| 510 | depersistedProps = mergeRight(props, update); |
| 511 | } |
| 512 | |
| 513 | if (finalPersistence && persistenceChanged) { |
| 514 | const finalStorage = getStore(finalPersistenceType, dispatch); |
| 515 | // apply new persistence |
| 516 | forEach( |
| 517 | persistedProp => |
| 518 | modProp( |
no test coverage detected
searching dependent graphs…