/ common / features / rehydrateAddressBook.ts
rehydrateAddressBook.ts
 1  import { addressBookConstants, addressBookTypes, addressBookReducer } from './addressBook';
 2  
 3  export default function rehydrateAddressBookState(
 4    ab: addressBookTypes.AddressBookState | undefined
 5  ): addressBookTypes.AddressBookState {
 6    const addressBook = { ...addressBookReducer.INITIAL_STATE };
 7    if (!ab) {
 8      return addressBookReducer.INITIAL_STATE;
 9    }
10  
11    // Lower case addresses
12    Object.keys(ab.addresses).forEach(address => {
13      addressBook.addresses[address.toLowerCase()] = ab.addresses[address];
14    });
15  
16    Object.keys(ab.labels).forEach(label => {
17      addressBook.labels[label] = ab.labels[label].toLowerCase();
18    });
19  
20    Object.keys(ab.entries).forEach(id => {
21      // Remove the temporary entries that address book and account store info in
22      if (
23        id === addressBookConstants.ADDRESS_BOOK_TABLE_ID ||
24        id === addressBookConstants.ACCOUNT_ADDRESS_ID
25      ) {
26        return;
27      }
28  
29      const entry = {
30        ...ab.entries[id],
31        address: ab.entries[id].address.toLowerCase()
32      };
33  
34      // Convert errorous entries into temporary ones
35      if (entry.addressError) {
36        entry.temporaryAddress = entry.address;
37        delete entry.addressError;
38      }
39      if (entry.labelError) {
40        entry.temporaryLabel = entry.label;
41        delete entry.labelError;
42      }
43  
44      addressBook.entries[id] = entry;
45    });
46  
47    return addressBook;
48  }