From c41cecebd6c62b67adc9e26bfc381cf3d9175a34 Mon Sep 17 00:00:00 2001 From: diemarfe64635 Date: Fri, 26 Jun 2020 18:16:35 +0200 Subject: [PATCH] saving data to ember store --- app/components/produkt.hbs | 14 +++---- app/components/produkt.js | 32 ++++++++------- app/components/rezept.hbs | 48 ++++++++++------------ app/components/rezept.js | 24 ++++++++++- app/components/services/store.js | 4 -- app/models/produkt.js | 2 +- app/models/rezept.js | 2 +- app/router.js | 1 + app/routes/produkte.js | 25 +----------- app/routes/rezepte.js | 23 +---------- app/templates/neues-produkt.hbs | 5 +++ app/templates/produkte.hbs | 54 ++++++++++++------------- app/templates/rezepte.hbs | 2 +- app/templates/zettel.hbs | 4 +- public/api/produkts.json | 12 ++++-- public/api/rezepts.json | 18 +++++---- tests/acceptance/einkaufszettel-test.js | 4 +- 17 files changed, 127 insertions(+), 147 deletions(-) delete mode 100644 app/components/services/store.js create mode 100644 app/templates/neues-produkt.hbs diff --git a/app/components/produkt.hbs b/app/components/produkt.hbs index 3de7ce5..0324918 100644 --- a/app/components/produkt.hbs +++ b/app/components/produkt.hbs @@ -1,11 +1,9 @@ - diff --git a/app/components/produkt.js b/app/components/produkt.js index 8f1b224..c3dea8f 100644 --- a/app/components/produkt.js +++ b/app/components/produkt.js @@ -5,7 +5,7 @@ import { inject as service } from '@ember/service'; export default class ProduktController extends Component { @tracked isLarge = false; - @tracked isSelected = false; + @tracked isSelected; @service store; @@ -17,18 +17,19 @@ export default class ProduktController extends Component { @action toggleSelection(produktname) { this.isSelected = !this.isSelected; - this.setStatus(produktname); + this.setStatus(produktname, this.isSelected); } @action getStatus(produktname) { + //sucht Produkt im Store this.store.findAll('produkt') .then(function(suchergebnis) { suchergebnis.forEach(element => { if(element.titel==produktname) { - this.isSelected = element.getStatus().isSelected; + this.isSelected = element.isSelected; } }); @@ -39,17 +40,20 @@ export default class ProduktController extends Component { }); } - setStatus(produktname) + setStatus(produktname, selection) { - - //schreibt den aktuellen Zustand in den store - let suchergebnis = this.store.query('produkt', { - filter: - { - titel: produktname - }}).then(function(element) - { - element.isSelected = this.isSelected; - });; + //schreibt den aktuellen Zustand in den Store + this.store.findAll('produkt') + .then(function(suchergebnis) + { + suchergebnis.forEach(element => { + if(element.titel==produktname) + { + element.isSelected = selection; + element.save(); + this.store.updateRelationships(); + } + }); + }); } } diff --git a/app/components/rezept.hbs b/app/components/rezept.hbs index 77d196d..be2ec4c 100644 --- a/app/components/rezept.hbs +++ b/app/components/rezept.hbs @@ -1,35 +1,29 @@ -{{#if this.isSelected}} - {{else}} - {{/if}} diff --git a/app/components/rezept.js b/app/components/rezept.js index 3f9126e..a1eb35b 100644 --- a/app/components/rezept.js +++ b/app/components/rezept.js @@ -1,18 +1,38 @@ import Component from '@glimmer/component'; import { action } from '@ember/object'; import { tracked } from '@glimmer/tracking'; +import { inject as service } from '@ember/service'; export default class RezeptController extends Component { @tracked isLarge = false; - @tracked isSelected = false; + @tracked isSelected; + + @service store; @action toggleSize() { this.isLarge = !this.isLarge; } - @action toggleSelection() + @action toggleSelection(rezeptname) { this.isSelected = !this.isSelected; + this.setStatus(rezeptname, this.isSelected); + } + + setStatus(rezeptname, selection) + { + //schreibt den aktuellen Zustand in den Store + this.store.findAll('rezept') + .then(function(suchergebnis) + { + suchergebnis.forEach(element => { + if(element.titel==rezeptname) + { + element.isSelected = selection; + element.save(); + } + }); + }); } } diff --git a/app/components/services/store.js b/app/components/services/store.js deleted file mode 100644 index 5d5332e..0000000 --- a/app/components/services/store.js +++ /dev/null @@ -1,4 +0,0 @@ -import DS from 'ember-data'; - -export default DS.Store.extend({ -}); \ No newline at end of file diff --git a/app/models/produkt.js b/app/models/produkt.js index 25c0b93..93f8bf4 100644 --- a/app/models/produkt.js +++ b/app/models/produkt.js @@ -2,7 +2,7 @@ import Model, { attr } from '@ember-data/model'; export default class ProduktModel extends Model { @attr titel; - @attr isSelected; + @attr ('boolean') isSelected; @attr kategorie; @attr menge; @attr einheit; diff --git a/app/models/rezept.js b/app/models/rezept.js index 61d00b4..e29f94a 100644 --- a/app/models/rezept.js +++ b/app/models/rezept.js @@ -2,7 +2,7 @@ import Model, { attr, hasMany } from '@ember-data/model'; export default class RezeptModel extends Model { @attr titel; - @attr isSelected; + @attr ('boolean') isSelected; @attr ('string') beschreibung; @attr kategorie; @attr produkte; diff --git a/app/router.js b/app/router.js index 309f4e3..d0a8406 100644 --- a/app/router.js +++ b/app/router.js @@ -10,4 +10,5 @@ Router.map(function() { this.route('rezepte'); this.route('zettel'); this.route('produkte'); + this.route('neues-produkt'); }); diff --git a/app/routes/produkte.js b/app/routes/produkte.js index 76c0f87..5d60329 100644 --- a/app/routes/produkte.js +++ b/app/routes/produkte.js @@ -8,27 +8,4 @@ export default class ProduktRoute extends Route { async model() { return this.store.findAll('produkt'); } -} - - - - /*async model() { - let response = await fetch('/api/produkte.json'); - let { data } = await response.json(); - - return data.map(model => { - let { attributes } = model; - let kategorie; - - if (PRODUKT_KATEGORIEN.includes(attributes.kategorie)) { - kategorie = attributes.kategorie; - } - else - { - kategorie = 'Sonstiges'; - } - - return { kategorie, ...attributes }; - }); - } -}*/ \ No newline at end of file +} \ No newline at end of file diff --git a/app/routes/rezepte.js b/app/routes/rezepte.js index 9ebcc54..bbd9687 100644 --- a/app/routes/rezepte.js +++ b/app/routes/rezepte.js @@ -22,25 +22,4 @@ export default class RezeptRoute extends Route{ async model() { return this.store.findAll('rezept'); } -} - - /*async model() { - let response = await fetch('/api/rezepte.json'); - let { data } = await response.json(); - - return data.map(model => { - let { attributes } = model; - let kategorie; - - if (REZEPT_KATEGORIEN.includes(attributes.kategorie)) { - kategorie = attributes.kategorie; - } - else - { - kategorie = 'Sonstiges'; - } - - return { kategorie, ...attributes }; - }); - } -}*/ \ No newline at end of file +} \ No newline at end of file diff --git a/app/templates/neues-produkt.hbs b/app/templates/neues-produkt.hbs new file mode 100644 index 0000000..35ff160 --- /dev/null +++ b/app/templates/neues-produkt.hbs @@ -0,0 +1,5 @@ + +

neues Produkte

+

Hier kannst du ein neues Produkte hinzufügen!

+ Produkte anzeigen +
\ No newline at end of file diff --git a/app/templates/produkte.hbs b/app/templates/produkte.hbs index 4cbe767..75a9124 100644 --- a/app/templates/produkte.hbs +++ b/app/templates/produkte.hbs @@ -1,7 +1,7 @@

deine Produkte

Hier kannst du aus deinen Produkten wählen oder neue Produkte hinzufügen!

- Produkte bearbeiten + Produkt hinzufügen
@@ -9,7 +9,7 @@ @@ -21,31 +21,31 @@ - - - - -
-
    - {{#each @model as |produkt|}} - {{#if (compare produkt.kategorie '===' 'Fleisch')}} - - {{/if}} - {{/each}} -
-
-
- - -
-
    - {{#each @model as |produkt|}} - {{#if (compare produkt.kategorie '===' 'Pasta')}} - + + {{/if}} + {{/each}} +
+
+
+ + +
+
    + {{#each @model as |produkt|}} + {{#if (compare produkt.kategorie '===' 'Fleisch')}} + + {{/if}} + {{/each}} +
+
+
+ + +
+
    + {{#each @model as |produkt|}} + {{#if (compare produkt.kategorie '===' 'Pasta')}} + {{/if}} {{/each}}
diff --git a/app/templates/rezepte.hbs b/app/templates/rezepte.hbs index 51b3b9b..ad0e8df 100644 --- a/app/templates/rezepte.hbs +++ b/app/templates/rezepte.hbs @@ -9,7 +9,7 @@
    {{#each @model as |rezept|}} {{#if (compare rezept.kategorie '===' 'Pasta')}} -
  • +
  • {{/if}} {{/each}}
diff --git a/app/templates/zettel.hbs b/app/templates/zettel.hbs index 4e52826..3c536e7 100644 --- a/app/templates/zettel.hbs +++ b/app/templates/zettel.hbs @@ -9,9 +9,9 @@
    {{#each @model as |produkt|}} {{#if produkt.isSelected}} -
  • + {{/if}} {{/each}}
-
\ No newline at end of file + \ No newline at end of file diff --git a/public/api/produkts.json b/public/api/produkts.json index fcc50ab..e1e34d7 100644 --- a/public/api/produkts.json +++ b/public/api/produkts.json @@ -8,7 +8,8 @@ "kategorie": "Pasta", "menge": 500, "einheit": "Gramm", - "bild": "https://www.pastaweb.de/wp-content/uploads/2016/02/spaghetti.jpg" + "bild": "https://www.pastaweb.de/wp-content/uploads/2016/02/spaghetti.jpg", + "is-selected": false } }, { @@ -19,7 +20,8 @@ "kategorie": "Gemüse", "menge": 1, "einheit": "Kopf", - "bild": "https://napolipizza-spiez.ch/WebRoot/Store2/Shops/178389/5BD1/5BA4/85F2/ACB6/97E9/D91A/30FA/F35F/gruener-salat-2464087.jpg" + "bild": "https://napolipizza-spiez.ch/WebRoot/Store2/Shops/178389/5BD1/5BA4/85F2/ACB6/97E9/D91A/30FA/F35F/gruener-salat-2464087.jpg", + "is-selected": false } }, { @@ -30,7 +32,8 @@ "kategorie": "Milchprodukte", "menge": 1, "einheit": "Liter", - "bild": "https://lebensmittel-warenkunde.de/assets/images/milch-milchprodukte.jpg" + "bild": "https://lebensmittel-warenkunde.de/assets/images/milch-milchprodukte.jpg", + "is-selected": false } }, { @@ -41,7 +44,8 @@ "kategorie": "Milchprodukte", "menge": 200, "einheit": "Gramm", - "bild": "https://www.der-bank-blog.de/wp-content/uploads/2016/04/banking-schweizer-kaese.jpg" + "bild": "https://www.der-bank-blog.de/wp-content/uploads/2016/04/banking-schweizer-kaese.jpg", + "is-selected": false } } ] diff --git a/public/api/rezepts.json b/public/api/rezepts.json index 616a7cc..04dbbe4 100644 --- a/public/api/rezepts.json +++ b/public/api/rezepts.json @@ -6,6 +6,10 @@ "attributes": { "titel": "Nudeln mit Garnelen und Zucchini", "kategorie": "Pasta", + "personen": 4, + "dauer": 20, + "bild": "https://www.pastaweb.de/wp-content/uploads/2016/02/spaghetti.jpg", + "is-selected": false, "beschreibung": "(1) Die Garnelen kalt überbrausen, in wenig Salzwasser kurz aufkochen, abgießen, das Wasser aufbewahren. (2) In einer Pfanne in der heißen Butter die Lauchzwiebeln und den Knoblauch anschwitzen, die Zucchiniwürfel und evtl. die Chilischoten zugeben, mit Salz und Pfeffer abwürzen. Zugedeckt 5 Minuten dünsten. Die Garnelen mit etwas Garnelenwasser unterischen, noch einmal erhitzen. Über die angerichteten Nudeln geben.", "produkte": [ { @@ -82,10 +86,7 @@ "type": "gewuerz", "titel": "Chilischote" } - ], - "personen": 4, - "dauer": "20", - "bild": "https://www.pastaweb.de/wp-content/uploads/2016/02/spaghetti.jpg" + ] }, { "type": "rezept", @@ -93,6 +94,10 @@ "attributes": { "titel": "Lasagne Bolognese", "kategorie": "Pasta", + "personen": 4, + "dauer": 80, + "bild": "https://www.pastaweb.de/wp-content/uploads/2016/02/spaghetti.jpg", + "is-selected": false, "beschreibung": "(1) Die Bologneser Sauce und die Bechamelsauce zubereiten. (2) Den Boden einer Auflaufform mit etwas Bechamelsauce bedecken, mit Lasagneblättern auslegen. Einige Löffel Bologneser Sauce darüfergeben, darauf einige Löffel Bechamelsauceverstreichen und mit Parmesan bestreuen. Diesen Vorgang wiederholen, bis alle Zutaten aufgebraucht sind. Die letzte Schicht sind Lasagneblätter, Bechamelsauce und Parmesan. (3) Die Form auf dem Rost in den kalten Backofen schieben und etwa 40 Minuten bei 220°C goldgelb backen. ", "produkte": [ { @@ -145,10 +150,7 @@ "type": "gewuerz", "titel": "Pfeffer" } - ], - "personen": 4, - "dauer": "80", - "bild": "https://www.pastaweb.de/wp-content/uploads/2016/02/spaghetti.jpg" + ] } ] } \ No newline at end of file diff --git a/tests/acceptance/einkaufszettel-test.js b/tests/acceptance/einkaufszettel-test.js index 83339c4..a6ce96a 100644 --- a/tests/acceptance/einkaufszettel-test.js +++ b/tests/acceptance/einkaufszettel-test.js @@ -65,10 +65,10 @@ module('Acceptance | einkaufszettel', function(hooks) { assert.dom('nav a.menu-rezepte').hasText('Rezepte'); assert.dom('.jumbo h2').hasText('deine Produkte'); - assert.dom('.jumbo a.button').hasText('Produkte bearbeiten'); + assert.dom('.jumbo a.button').hasText('Produkt hinzufügen'); await click('.jumbo a.button'); - assert.equal(currentURL(), '/produkte'); + assert.equal(currentURL(), '/neues-produkt'); }); test('visiting /rezepte', async function(assert) {