瀏覽代碼

fix(persistence): scalar values not retrieved correctly

Ryan Chandler 4 年之前
父節點
當前提交
754bca204e

文件差異過大導致無法顯示
+ 0 - 0
dist/spruce.js


文件差異過大導致無法顯示
+ 0 - 0
dist/spruce.js.map


文件差異過大導致無法顯示
+ 0 - 0
dist/spruce.module.js


文件差異過大導致無法顯示
+ 0 - 0
dist/spruce.module.js.map


文件差異過大導致無法顯示
+ 0 - 0
dist/spruce.umd.js


文件差異過大導致無法顯示
+ 0 - 0
dist/spruce.umd.js.map


+ 12 - 0
examples/index.html

@@ -16,6 +16,16 @@
             </button>
         </div>
 
+        <div x-data>
+            <input type="radio" name="colorScheme" x-model="$store.colorScheme" value="light">
+            Light
+
+            <input type="radio" name="colorScheme" x-model="$store.colorScheme" value="dark">
+            Dark
+
+            <p x-text="$store.colorScheme"></p>
+        </div>
+
         <script src="../dist/spruce.umd.js"></script>
 
         <script>
@@ -33,6 +43,8 @@
                 }
             }, true)
 
+            Spruce.store('colorScheme', 'light', true)
+
             Spruce.watch('application.name', () => {
                 Spruce.store('persisted').example = 'World';
             });

+ 12 - 2
src/index.js

@@ -113,9 +113,19 @@ const Spruce = {
     },
 
     retrieveFromLocalStorage(name, methods = {}) {
-        const storage = JSON.parse(this.persistenceDriver.getItem(`__spruce:${name}`))
+        const value = this.persistenceDriver.getItem(`__spruce:${name}`)
 
-        return storage ? Object.assign(methods, storage) : null
+        if (! value) {
+            return null
+        }
+
+        let storage = JSON.parse(value)
+
+        if (typeof storage === 'object') {
+            storage = Object.assign(methods, storage)
+        }
+
+        return storage
     },
 
     updateLocalStorage(name) {

+ 17 - 0
tests/cypress/fixtures/persistence/scalar.html

@@ -0,0 +1,17 @@
+<html>
+    <head>
+        <script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.js" defer></script>
+    </head>
+    <body>
+        <div x-data>
+            <p x-text="$store.colorScheme"></p>
+            <button @click="$store.colorScheme = 'dark'"></button>
+        </div>
+
+        <script src="/dist/spruce.umd.js"></script>
+
+        <script>
+            Spruce.store('colorScheme', 'light', true)
+        </script>
+    </body>
+</html>

+ 14 - 1
tests/cypress/integration/persistence.spec.js

@@ -21,7 +21,7 @@ describe('persisted stores', () => {
     })
 
     it('should persist data between visits using a custom driver', () => {
-        cy.visit('/tests/cypress/fixtures/persistence/check-persisted.html')
+        cy.visit('/tests/cypress/fixtures/persistence/drivers.html')
 
         cy.get('p').should('have.text', 'bar')
 
@@ -33,6 +33,19 @@ describe('persisted stores', () => {
         cy.get('p').should('have.text', 'car')
     })
 
+    it('should persist scalar data between visits using a custom driver', () => {
+        cy.visit('/tests/cypress/fixtures/persistence/scalar.html')
+
+        cy.get('p').should('have.text', 'light')
+
+        cy.get('button').click()
+        cy.get('p').should('have.text', 'dark')
+
+        cy.reload()
+
+        cy.get('p').should('have.text', 'dark')
+    })
+
     it('should be able to call store methods when persisted', () => {
         cy.visit('/tests/cypress/fixtures/persistence/store-methods.html')
 

部分文件因文件數量過多而無法顯示