From 45fcb6578aa6479d18fd3b6d907d220e856c4a33 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Tue, 13 Aug 2019 11:52:49 +0200
Subject: [PATCH] Implement setter for the next language

---
 packages/language-select/src/language-select.js | 15 ++++++++++++---
 packages/language-select/test/unit.js           | 10 ++++++++++
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/packages/language-select/src/language-select.js b/packages/language-select/src/language-select.js
index 21d87172..da63a774 100644
--- a/packages/language-select/src/language-select.js
+++ b/packages/language-select/src/language-select.js
@@ -21,14 +21,22 @@ class LanguageSelect extends LitElement {
         i18n.t('en-action');
     }
 
-    _getNextLanguage() {
-        var index = this.languages.indexOf(this.lang);
+    _getNextLanguage(lang) {
+        var index = this.languages.indexOf(lang);
         var next = this.languages[index + 1];
         if (typeof next === 'undefined')
             next = this.languages[0];
         return next;
     }
 
+    _getPreviousLanguage(lang) {
+        var index = this.languages.indexOf(lang);
+        var prev = this.languages[index - 1];
+        if (typeof prev === 'undefined')
+            prev = this.languages[this.languages.length - 1];
+        return prev;
+    }
+
     static get properties() {
         return {
             lang: {type: String},
@@ -63,10 +71,11 @@ class LanguageSelect extends LitElement {
     }
 
     set next(value) {
+        this.lang = this._getPreviousLanguage(value);
     }
 
     get next() {
-        return this._getNextLanguage();
+        return this._getNextLanguage(this.lang);
     }
 
     static get styles() {
diff --git a/packages/language-select/test/unit.js b/packages/language-select/test/unit.js
index 3511aa8a..1ac3cc0c 100644
--- a/packages/language-select/test/unit.js
+++ b/packages/language-select/test/unit.js
@@ -34,6 +34,16 @@ describe('vpu-language-select basics', () => {
     expect(node.next).to.equal('en');
     expect(events.length).to.equal(2);
   });
+
+  it('change next', () => {
+    node.lang = 'en';
+    expect(node.next).to.equal('de');
+    expect(node.lang).to.equal('en');
+    node.next = 'en';
+    expect(node.next).to.equal('en');
+    expect(node.lang).to.equal('de');
+    expect(events.length).to.equal(2);
+  });
 });
 
 describe('vpu-language-select demo', () => {
-- 
GitLab