Squashed commit of the following:

commit ba1f10cd3a
Merge: 4e0cc34d4 ef4ce62f5
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Tue Jan 18 07:59:32 2022 +0100

    Merge branch 'develop' into facet-fix

commit 4e0cc34d41
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 17:18:43 2022 -0600

    better fix for counting facets

commit ef4ce62f5b
Author: Kaibu <notkaibu@gmail.com>
Date:   Mon Jan 17 23:48:57 2022 +0100

    custom class selection for lookupinput comp

commit b990462bdb
Merge: c60141940 5e34c6ddf
Author: Kaibu <notkaibu@gmail.com>
Date:   Mon Jan 17 23:48:12 2022 +0100

    Merge branch 'develop' of https://github.com/vabene1111/recipes into develop

commit 5e34c6ddf0
Merge: 532d32c19 d8d76ae9e
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 23:29:49 2022 +0100

    Merge pull request #1353 from smilerz/supermarket-category

    fix missing label on first supermarket category

commit d8d76ae9e0
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 16:12:54 2022 -0600

    fix missing label supermarket category

commit c60141940d
Author: Kaibu <notkaibu@gmail.com>
Date:   Mon Jan 17 23:02:42 2022 +0100

    shopping list ux improvements

commit 532d32c194
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 22:41:38 2022 +0100

    fixed shopping user save setting would not work

commit 54721a0a62
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 22:37:14 2022 +0100

    also added space to bot

commit c27933548d
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 22:28:02 2022 +0100

    fixed order of delete

commit d04e9518cb
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 22:13:36 2022 +0100

    fixed telegram shopping bot

commit b9065f7052
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 22:03:57 2022 +0100

    added space deletion feature

commit c8c29e1b5a
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 21:14:22 2022 +0100

    fixed performance issue

commit 5724ef9511
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 14:02:58 2022 -0600

    fix boolean directive

commit 2595a26fb4
Merge: e1c7305c0 437296415
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 20:26:02 2022 +0100

    Merge pull request #1351 from MaxJa4/patch-1

    Add hint about trailing slashes for subpath setups

commit e1c7305c07
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 20:22:37 2022 +0100

    switcher basically working again

commit 418c38423f
Merge: 90b6f9ad0 cc5be844d
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 20:15:01 2022 +0100

    Merge pull request #1352 from smilerz/fix-search

    force list params to list

commit cc5be844d5
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 13:13:26 2022 -0600

    force list params to list

commit 90b6f9ad06
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 19:54:16 2022 +0100

    fixed sub recipe issue

commit 437296415e
Author: MaxJa4 <74194322+MaxJa4@users.noreply.github.com>
Date:   Mon Jan 17 18:43:14 2022 +0100

    Update .env.template

commit a8c885bd21
Author: MaxJa4 <74194322+MaxJa4@users.noreply.github.com>
Date:   Mon Jan 17 18:41:41 2022 +0100

    Remove newline at the end

commit a539d14aad
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 18:15:23 2022 +0100

    wip switcher

commit 2b0541bd74
Author: MaxJa4 <74194322+MaxJa4@users.noreply.github.com>
Date:   Mon Jan 17 18:05:39 2022 +0100

    Add hint about trailing slashes for subpath setups

    Add hint about trailing slashes for subpath setups due to recent issue on Discord.

commit 3f53a924e1
Merge: d23158839 0ed9100fb
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 18:01:47 2022 +0100

    Merge branch 'develop' of https://github.com/vabene1111/recipes into develop

commit 0ed9100fb1
Merge: d2b796ddd 85ecac3a1
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 17:59:19 2022 +0100

    Merge pull request #1350 from TandoorRecipes/patch-empty-recipe_list

    Update recipe_search.py

commit d23158839b
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 17:58:09 2022 +0100

    Revert "temporarily disable recipe switcher"

    This reverts commit d2b796ddd2.

commit d2b796ddd2
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 17:58:04 2022 +0100

    temporarily disable recipe switcher

commit 8b1e80efeb
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 17:51:29 2022 +0100

    wip

commit 85ecac3a17
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 10:10:38 2022 -0600

    Update recipe_search.py

commit e0b8d6fcc3
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 17:00:08 2022 +0100

    added exception catch to nextcloud importer

    to handle empty folders in sync

commit edd47873f7
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 16:51:04 2022 +0100

    fixed signup button and autofocus on user input fields

commit c14dd04261
Merge: a37672812 769365d62
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 16:50:36 2022 +0100

    Merge pull request #1348 from smilerz/fuzzy_search

    Fuzzy search

commit 769365d624
Merge: ddb9e70d3 30421d067
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 09:46:33 2022 -0600

    Merge branch 'fuzzy_search' of github.com:smilerz/recipes into fuzzy_search

commit ddb9e70d31
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 09:46:26 2022 -0600

    fix url_import

commit a376728120
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 16:29:29 2022 +0100

    fixed keyword creation in exporter #1213

commit 306f90aa98
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 16:27:10 2022 +0100

    recipe editor decimal fixes

commit a19ad706ce
Merge: 4af6de742 8f3044dbe
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 16:22:18 2022 +0100

    Merge branch 'develop' of https://github.com/vabene1111/recipes into develop

commit 4af6de7425
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 16:22:11 2022 +0100

    Revert "Merge pull request #1280 from MarcusWolschon/feature1275_readable_export_file_names"

    This reverts commit c4f40b9639, reversing
    changes made to 93b868bc69.

commit 8f3044dbee
Merge: 7c5ffdaef 51620a34d
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 16:04:40 2022 +0100

    Merge pull request #1316 from tomtjes/docs-swag-example

    add swag config example

commit 7c5ffdaef4
Merge: d3b71e40c 30421d067
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 15:51:54 2022 +0100

    Merge pull request #1347 from smilerz/fuzzy_search

    Fuzzy search

commit 30421d067e
Merge: dde350c8a d3b71e40c
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 15:51:23 2022 +0100

    Merge branch 'develop' into fuzzy_search

commit d3b71e40c7
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 15:43:35 2022 +0100

    cleand up context menu code

commit 1a84a8fe80
Merge: 16cb99f91 934eeee5c
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 15:39:11 2022 +0100

    Merge pull request #1289 from MarcusWolschon/features/1093_recipe_link_in_plan

commit 16cb99f915
Merge: a451f722a f07690d7e
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 15:37:48 2022 +0100

    Merge pull request #1317 from mheiland/patch-1

    Example for third-party authentication

commit a451f722a1
Merge: f12196d1c 99b3ed846
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 15:35:43 2022 +0100

    Merge pull request #1327 from tomtjes/docs-faq-amendments

    FAQ amendments

commit dde350c8af
Author: smilerz <smilerz@gmail.com>
Date:   Mon Jan 17 08:35:19 2022 -0600

    prettier cleanup

commit f12196d1c6
Merge: d4242a244 b3e971fe0
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Mon Jan 17 15:20:45 2022 +0100

    Merge pull request #1343 from MatthiasLohr/feature/db-url-path

    Allow to specify an actual path using DATABASE_URL

commit d4242a244d
Merge: 0c603e366 8a7c4e11c
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 15:16:37 2022 +0100

    Merge branch 'master' into develop

commit 8a7c4e11c9
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Mon Jan 17 15:16:13 2022 +0100

    fixed invite link counting

commit 745bb58c7e
Author: vabene1111 <vabene1234@googlemail.com>
Date:   Sun Jan 9 18:25:38 2022 +0100

    fixed valid filter on invite link counter

commit b3e971fe09
Author: Matthias Lohr <mail@mlohr.com>
Date:   Mon Jan 17 11:21:36 2022 +0100

    allow to specify an actual path using DATABASE_URL

commit 0c603e3665
Author: Oliver Cervera <olivercervera@yahoo.it>
Date:   Sun Jan 16 15:21:49 2022 +0000

    Translated using Weblate (Italian)

    Currently translated at 84.1% (239 of 284 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/

commit fed9cfeeb7
Author: Oliver Cervera <olivercervera@yahoo.it>
Date:   Sun Jan 16 15:44:28 2022 +0000

    Translated using Weblate (Italian)

    Currently translated at 96.6% (492 of 509 strings)

    Translation: Tandoor/Recipes Backend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/

commit 5a65fd2231
Merge: c2a763fa4 24e42496a
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Sun Jan 16 17:29:35 2022 +0100

    Merge pull request #1331 from TandoorRecipes/dependabot/npm_and_yarn/vue/follow-redirects-1.14.7

    Bump follow-redirects from 1.14.6 to 1.14.7 in /vue

commit c2a763fa4c
Author: SMunos <smunos@synos.ovh>
Date:   Fri Jan 14 23:19:21 2022 +0000

    Translated using Weblate (French)

    Currently translated at 100.0% (284 of 284 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/

commit 528767a835
Author: Josselin du PLESSIS <josse@du-plessis.fr>
Date:   Fri Jan 14 23:20:10 2022 +0000

    Translated using Weblate (French)

    Currently translated at 100.0% (284 of 284 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/

commit 9b182f6076
Author: 糖多 <1365143958@qq.com>
Date:   Sat Jan 15 06:09:40 2022 +0000

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 32.0% (91 of 284 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hans/

commit 968b710b49
Author: 糖多 <1365143958@qq.com>
Date:   Sat Jan 15 06:19:48 2022 +0000

    Translated using Weblate (Chinese (Simplified))

    Currently translated at 28.6% (146 of 509 strings)

    Translation: Tandoor/Recipes Backend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/zh_Hans/

commit f11e07d347
Author: Josselin du PLESSIS <josse@du-plessis.fr>
Date:   Fri Jan 14 23:23:05 2022 +0000

    Translated using Weblate (French)

    Currently translated at 100.0% (509 of 509 strings)

    Translation: Tandoor/Recipes Backend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/

commit 24e42496a7
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Sun Jan 16 01:02:54 2022 +0000

    Bump follow-redirects from 1.14.6 to 1.14.7 in /vue

    Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.6 to 1.14.7.
    - [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
    - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.6...v1.14.7)

    ---
    updated-dependencies:
    - dependency-name: follow-redirects
      dependency-type: indirect
    ...

    Signed-off-by: dependabot[bot] <support@github.com>

commit 9da496cb6d
Merge: 8cebc98d3 9221533ae
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Sat Jan 15 21:46:04 2022 +0100

    Merge pull request #1323 from MaxJa4/patch-1

    Added Apache2 in the bug report template

commit 99b3ed8464
Author: tomtjes <nesiofnqwe@mailbox.org>
Date:   Sat Jan 15 13:58:40 2022 -0500

    add FAQ for PWA

commit 281535e756
Author: tomtjes <nesiofnqwe@mailbox.org>
Date:   Sat Jan 15 13:57:20 2022 -0500

    phrase FAQ as questions

commit 9221533ae7
Author: MaxJa4 <74194322+MaxJa4@users.noreply.github.com>
Date:   Sat Jan 15 12:56:01 2022 +0100

    Added Apache2 in the bug report template

    Added Apache2 as selectable option in the bug report template

commit f07690d7e3
Author: mheiland <15824364+mheiland@users.noreply.github.com>
Date:   Sat Jan 15 00:24:56 2022 +0100

    Example for third-party authentication

    Providing an example to integrate Keycloak as IAM for Tandoor. Hinting that both SOCIAL* variables are required.

commit 8cebc98d3b
Author: SMunos <smunos@synos.ovh>
Date:   Fri Jan 14 23:18:38 2022 +0000

    Translated using Weblate (French)

    Currently translated at 100.0% (284 of 284 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/

commit 965d2c05e7
Author: FrenchAnon <qdskyhwfeu@email.ucms.edu.pk>
Date:   Fri Jan 14 23:17:50 2022 +0000

    Translated using Weblate (French)

    Currently translated at 100.0% (284 of 284 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/

commit 17ad01ae8c
Author: Josselin du PLESSIS <josse@du-plessis.fr>
Date:   Fri Jan 14 22:42:42 2022 +0000

    Translated using Weblate (French)

    Currently translated at 100.0% (284 of 284 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/

commit 51620a34d9
Author: tomtjes <nesiofnqwe@mailbox.org>
Date:   Fri Jan 14 15:10:22 2022 -0500

    add swag config example

commit 91fcb1b822
Author: Tomasz Klimczak <klemensble@gmail.com>
Date:   Thu Jan 6 12:50:29 2022 +0000

    Translated using Weblate (Polish)

    Currently translated at 80.9% (225 of 278 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/

commit 01d5ab92c5
Author: Tiago Rascazzi <t.d77@hotmail.com>
Date:   Thu Jan 6 16:30:49 2022 +0000

    Translated using Weblate (French)

    Currently translated at 72.6% (202 of 278 strings)

    Translation: Tandoor/Recipes Frontend
    Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/

commit 79c8d26e8c
Merge: 9486b08e2 0e1153ce3
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Fri Jan 14 17:18:30 2022 +0100

    Merge pull request #1311 from smilerz/patch-2

    fix bug creating food with create form

commit 9486b08e20
Merge: d36033a8b ffa91863d
Author: vabene1111 <vabene1111@users.noreply.github.com>
Date:   Fri Jan 14 16:57:10 2022 +0100

    Merge pull request #1309 from MaxJa4/develop

    Disabled old issue templates and added new ones with new GitHub issues format

commit 934eeee5c4
Author: Marcus Wolschon <Marcus@Wolschon.biz>
Date:   Fri Jan 14 13:56:46 2022 +0100

commit 2927333bf1
Author: Marcus Wolschon <Marcus@Wolschon.biz>
Date:   Fri Jan 14 13:52:42 2022 +0100

commit 0e1153ce3a
Author: smilerz <smilerz@gmail.com>
Date:   Thu Jan 13 17:40:26 2022 -0600

    deleted extraneous emit

commit b3f05b0bfd
Author: smilerz <smilerz@gmail.com>
Date:   Thu Jan 13 16:50:15 2022 -0600

    fix bug creating food with create form

commit ffa91863dd
Author: Maximilian Jannack <maxijannack@t-online.de>
Date:   Thu Jan 13 21:26:15 2022 +0100

    Added config.yml for FAQ link

commit cf2d33daad
Author: Maximilian Jannack <maxijannack@t-online.de>
Date:   Thu Jan 13 21:17:08 2022 +0100

    Disabled old issue templates and added new ones with new GitHub issues format

commit 8f08ba7114
Author: Marcus Wolschon <Marcus@Wolschon.biz>
Date:   Wed Jan 12 16:15:55 2022 +0100

commit 8a4f35e592
Author: Marcus Wolschon <Marcus@Wolschon.biz>
Date:   Wed Jan 12 11:37:08 2022 +0100
This commit is contained in:
smilerz
2022-01-18 05:20:46 -06:00
committed by Chris Scoggins
parent 1fe027b313
commit 0e89723eab

View File

@@ -4,10 +4,10 @@
<div class="row float-top pl-0 pr-0">
<div class="col-auto no-gutter ml-auto">
<b-button variant="link" class="px-1 pt-0 pb-1 d-none d-md-inline-block">
<i class="btn fas fa-plus-circle fa-lg px-0" @click="entrymode = !entrymode" :class="entrymode ? 'text-success' : 'text-primary'" />
<i class="btn fas fa-plus-circle fa-lg px-0" @click="entrymode = !entrymode" :class="entrymode ? 'text-success' : 'text-muted'" />
</b-button>
<b-button variant="link" class="px-1 pt-0 pb-1 d-none d-md-inline-block">
<i class="fas fa-download fa-lg nav-link dropdown-toggle text-primary px-1" id="downloadShoppingLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></i>
<i class="fas fa-download fa-lg nav-link dropdown-toggle text-muted px-1" id="downloadShoppingLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></i>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="downloadShoppingLink">
<DownloadPDF dom="#shoppinglist" name="shopping.pdf" :label="$t('download_pdf')" icon="far fa-file-pdf" />
@@ -17,7 +17,7 @@
</div>
</b-button>
<b-button variant="link" id="id_filters_button" class="px-1 pt-0 pb-1">
<i class="btn fas fa-filter text-decoration-none fa-lg px-1" :class="filterApplied ? 'text-danger' : 'text-primary'" />
<i class="btn fas fa-filter text-decoration-none fa-lg px-1" :class="filterApplied ? 'text-danger' : 'text-muted'" />
</b-button>
</div>
</div>
@@ -29,7 +29,7 @@
<b-spinner v-if="loading" type="border" small></b-spinner>
{{ $t("Shopping_list") }}
</template>
<div class="container p-0" id="shoppinglist">
<div class="container p-0 pr-lg-5 pl-lg-5" id="shoppinglist">
<div class="row">
<div class="col col-md-12 p-0 p-lg-3">
<div role="tablist">
@@ -92,8 +92,8 @@
<!-- shopping list table -->
<div v-if="items && items.length > 0">
<div v-for="(done, x) in Sections" :key="x">
<div v-if="x == 'true'" class="bg-header w-100 text-center d-flex justify-content-center align-items-center">
<span class="h4 d-flex mt-1 mb-1">{{ $t("Completed") }}</span>
<div v-if="x == 'true'">
<h4 class="pl-2 pl-md-0">{{ $t("Completed") }}</h4>
</div>
<div v-for="(s, i) in done" :key="i">
@@ -197,15 +197,25 @@
<i class="btn text-danger fas fa-trash fa-lg px-2 border-0" variant="link" :title="$t('Delete')" @click="deleteRecipe($event, r.list_recipe)" />
</td>
</tr>
</table>
</div>
</thead>
<tr v-for="r in Recipes" :key="r.list_recipe">
<td>{{ r.recipe_mealplan.name }}</td>
<td>{{ r.recipe_mealplan.recipe_name }}</td>
<td class="block-inline">
<b-form-input min="1" type="number" :debounce="300" :value="r.recipe_mealplan.servings" @input="updateServings($event, r.list_recipe)"></b-form-input>
</td>
<td>
<i class="btn text-danger fas fa-trash fa-lg px-2 border-0" variant="link" :title="$t('Delete')" @click="deleteRecipe($event, r.list_recipe)" />
</td>
</tr>
</table>
</b-tab>
<!-- supermarkets tab -->
<b-tab :title="$t('Supermarkets')">
<div class="row justify-content-center">
<!-- supermarkets column -->
<div class="col col-md-5">
<b-card no-body>
<b-card>
<template #header>
<h4 class="mb-0">
{{ $t("Supermarkets") }}
@@ -222,76 +232,79 @@
})
"
>
<i class="btn fas fa-plus-circle fa-lg px-0" :class="new_supermarket.entrymode ? 'text-success' : 'text-primary'" />
<i class="btn fas fa-plus-circle fa-lg px-0" :class="new_supermarket.entrymode ? 'text-success' : 'text-muted'" />
</b-button>
</h4>
</template>
<b-card
class="pt-5 pl-5 pr-5"
class="m-1 p-1 no-body"
border-variant="success"
header-bg-variant="success"
header-text-variant="white"
align="center"
v-if="new_supermarket.entrymode"
:header="new_supermarket.value ? new_supermarket.value : $t('SupermarketName')"
:header="$t('SupermarketName')"
>
<b-input-group>
<b-form-input type="text" class="form-control-append" :placeholder="$t('SupermarketName')" v-model="new_supermarket.value" />
<b-input-group-append>
<b-button class="input-group-append" variant="success" @click="addSupermarket"><i class="pr-2 pt-1 fas fa-save"></i> {{ $t("Create") }} </b-button>
</b-input-group-append>
</b-input-group>
<div class="input-group">
<b-form-input type="text" :placeholder="$t('SupermarketName')" v-model="new_supermarket.value" />
<b-button class="input-group-append" variant="success" @click="addSupermarket"><i class="pr-2 pt-1 fas fa-save"></i> {{ $t("Save") }} </b-button>
</div>
</b-card>
<b-card-body class="m-0 p-0">
<b-card class="mt-1 p-0" v-for="s in supermarkets" v-bind:key="s.id">
<b-card-header class="p-2 border-0 pt-3">
<b-card class="no-body mb-2" v-for="s in supermarkets" v-bind:key="s.id">
<b-card-title>
<div class="row">
<div class="col-12">
<h5 class="mt-1 mb-1">
{{ s.name }}
<b-button
variant="link"
class="p-0 m-0 float-right"
@click="
s.editmode = !s.editmode
new_category.entrymode = false
new_supermarket.entrymode = false
editSupermarket(s)
"
>
<i class="btn fas fa-edit fa-lg px-0" :class="s.editmode ? 'text-success' : 'text-primary'" />
</b-button>
<b-button variant="link" class="p-0 m-0 float-right" @click="deleteSupermarket(s)">
<i class="btn fas fa-trash fa-lg px-2 text-danger" />
</b-button>
</h5>
<div class="col">{{ s.name }}</div>
<div class="col-auto text-right ml-auto">
<b-button
variant="link"
class="p-0 m-0"
@click="
s.editmode = !s.editmode
new_category.entrymode = false
new_supermarket.entrymode = false
editSupermarket(s)
"
>
<i class="btn fas fa-edit fa-lg px-0" :class="s.editmode ? 'text-success' : 'text-muted'" />
</b-button>
<b-button variant="link" class="p-0 m-0" @click="deleteSupermarket(s)">
<i class="btn fas fa-trash fa-lg px-2 text-muted" />
</b-button>
</div>
</div>
</b-card-header>
<b-card-body class="m-0 p-0">
</b-card-title>
<b-card-body class="py-0">
<generic-pill :item_list="s.category_to_supermarket" label="category::name" color="info"></generic-pill>
</b-card-body>
</b-card>
</b-card-body>
</b-card>
</div>
<!-- supermarket category column -->
<div class="col col-md-5">
<b-card>
<b-card class="no-body">
<template #header>
<h4 class="mb-0">
{{ $t("Shopping_Categories") }}
<b-button
variant="link"
class="p-0 m-0 float-right"
@click="
new_category.entrymode = !new_category.entrymode
new_supermarket.entrymode = false
"
>
<i class="btn fas fa-plus-circle fa-lg px-0" :class="new_category.entrymode ? 'text-success' : 'text-primary'" />
</b-button>
</h4>
<div class="row">
<div class="col">
{{ $t("Shopping_Categories") }}
</div>
<div class="col-auto text-right ml-auto">
<b-button
variant="link"
class="p-0 m-0"
@click="
new_category.entrymode = !new_category.entrymode
new_supermarket.entrymode = false
"
>
<i class="btn fas fa-plus-circle fa-lg px-0" :class="new_category.entrymode ? 'text-success' : 'text-muted'" />
</b-button>
</div>
</div>
</template>
<b-card
class="m-1 p-1 no-body"
@@ -300,14 +313,12 @@
header-text-variant="white"
align="center"
v-if="new_category.entrymode"
:header="new_category.value ? new_category.value : $t('CategoryName')"
:header="$t('CategoryName')"
>
<b-input-group>
<b-form-input type="text" class="form-control-append" :placeholder="$t('CategoryName')" v-model="new_category.value" />
<b-input-group-append>
<b-button class="input-group-append" variant="success" @click="addCategory"><i class="pr-2 pt-1 fas fa-save"></i> {{ $t("Create") }} </b-button>
</b-input-group-append>
</b-input-group>
<div class="input-group">
<b-form-input type="text" :placeholder="$t('CategoryName')" v-model="new_category.value" />
<b-button class="input-group-append" variant="success" @click="addCategory"><i class="pr-2 pt-1 fas fa-save"></i> {{ $t("Save") }} </b-button>
</div>
</b-card>
<b-card-sub-title v-if="new_supermarket.editmode" class="pt-0 pb-3">{{ $t("CategoryInstruction") }} </b-card-sub-title>
@@ -324,29 +335,16 @@
>
<transition-group type="transition" :name="!drag ? 'flip-list' : null">
<b-card
no-body
v-hover
class="mt-1 list-group-item p-2"
class="m-0 p-0 font-weight-bold no-body list-group-item"
:style="new_supermarket.editmode ? 'cursor:move' : ''"
v-for="c in supermarketCategory"
v-bind:key="c.id"
:border-variant="new_supermarket.editmode ? 'success' : ''"
>
<b-card-header class="p-2 border-0">
<div class="row">
<div class="col-2" v-if="new_supermarket.editmode">
<button type="button" class="btn btn-lg shadow-none"><i class="fas fa-arrows-alt-v"></i></button>
</div>
<div :class="new_supermarket.editmode ? 'col-10' : 'col-12'">
<h5 class="mt-1 mb-1">
{{ categoryName(c) }}
<b-button variant="link" class="p-0 m-0 float-right" @click="deleteCategory(c)">
<i class="btn fas fa-trash fa-lg px-2 text-danger" />
</b-button>
</h5>
</div>
</div>
</b-card-header>
{{ categoryName(c) }}
<b-button variant="link" class="p-0 m-0 float-right" @click="deleteCategory(c)">
<i class="btn fas fa-trash fa-lg px-2 text-muted" />
</b-button>
</b-card>
</transition-group>
</draggable>
@@ -356,29 +354,18 @@
class="list-group"
:list="notSupermarketCategory"
group="category"
v-if="new_supermarket.editmode"
@start="drag = true"
@end="drag = false"
ghost-class="ghost"
v-if="new_supermarket.editmode"
v-bind="{ animation: 200 }"
>
<transition-group type="transition" :name="!drag ? 'flip-list' : null">
<b-card no-body v-hover class="mt-1 list-group-item p-2" style="cursor: move" v-for="c in notSupermarketCategory" v-bind:key="c.id" :border-variant="'danger'">
<b-card-header class="p-2 border-0">
<div class="row">
<div class="col-2" v-if="new_supermarket.editmode">
<button type="button" class="btn btn-lg shadow-none"><i class="fas fa-arrows-alt-v"></i></button>
</div>
<div :class="new_supermarket.editmode ? 'col-10' : 'col-12'">
<h5 class="mt-1 mb-1">
{{ categoryName(c) }}
<b-button variant="link" class="p-0 m-0 float-right" @click="deleteCategory(c)">
<i class="btn fas fa-trash fa-lg px-2 text-primary" />
</b-button>
</h5>
</div>
</div>
</b-card-header>
<b-card class="m-0 p-0 font-weight-bold no-body list-group-item" style="cursor: move" v-for="c in notSupermarketCategory" v-bind:key="c.id" :border-variant="'danger'">
{{ categoryName(c) }}
<b-button variant="link" class="p-0 m-0 float-right" @click="deleteCategory(c)">
<i class="btn fas fa-trash fa-lg px-2 text-muted" />
</b-button>
</b-card>
</transition-group>
</draggable>
@@ -394,7 +381,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("mealplan_autoadd_shopping") }}</div>
<div class="col col-md-6 text-right">
<input type="checkbox" class="form-control settings-checkbox" v-model="settings.mealplan_autoadd_shopping" @change="saveSettings" />
<input type="checkbox" class="form-control-sm" v-model="settings.mealplan_autoadd_shopping" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -406,7 +393,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("mealplan_autoexclude_onhand") }}</div>
<div class="col col-md-6 text-right">
<input type="checkbox" class="form-control settings-checkbox" v-model="settings.mealplan_autoexclude_onhand" @change="saveSettings" />
<input type="checkbox" class="form-control-sm" v-model="settings.mealplan_autoexclude_onhand" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -419,7 +406,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("mealplan_autoinclude_related") }}</div>
<div class="col col-md-6 text-right">
<input type="checkbox" class="form-control settings-checkbox" v-model="settings.mealplan_autoinclude_related" @change="saveSettings" />
<input type="checkbox" class="form-control-sm" v-model="settings.mealplan_autoinclude_related" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -457,7 +444,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("shopping_auto_sync") }}</div>
<div class="col col-md-6 text-right">
<input type="number" class="form-control" v-model="settings.shopping_auto_sync" @change="saveSettings" />
<input type="number" class="form-control-sm" v-model="settings.shopping_auto_sync" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -470,7 +457,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("shopping_add_onhand") }}</div>
<div class="col col-md-6 text-right">
<input type="checkbox" class="form-control settings-checkbox" v-model="settings.shopping_add_onhand" @change="saveSettings" />
<input type="checkbox" class="form-control-sm" v-model="settings.shopping_add_onhand" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -483,9 +470,10 @@
<div class="row">
<div class="col col-md-6">{{ $t("shopping_recent_days") }}</div>
<div class="col col-md-6 text-right">
<input type="number" class="form-control" v-model="settings.shopping_recent_days" @change="saveSettings" />
<input type="number" class="form-control-sm" v-model="settings.shopping_recent_days" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
<div class="col">
<em class="small text-muted">
@@ -496,7 +484,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("filter_to_supermarket") }}</div>
<div class="col col-md-6 text-right">
<input type="checkbox" class="form-control settings-checkbox" v-model="settings.filter_to_supermarket" @change="saveSettings" />
<input type="checkbox" class="form-control-sm" v-model="settings.filter_to_supermarket" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -509,7 +497,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("default_delay") }}</div>
<div class="col col-md-6 text-right">
<input type="number" class="form-control" min="1" v-model="settings.default_delay" @change="saveSettings" />
<input type="number" class="form-control-sm" min="1" v-model="settings.default_delay" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -522,7 +510,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("csv_delim_label") }}</div>
<div class="col col-md-6 text-right">
<input class="form-control" v-model="settings.csv_delim" @change="saveSettings" />
<input class="form-control-sm" v-model="settings.csv_delim" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -535,7 +523,7 @@
<div class="row">
<div class="col col-md-6">{{ $t("csv_prefix_label") }}</div>
<div class="col col-md-6 text-right">
<input class="form-control" v-model="settings.csv_prefix" @change="saveSettings" />
<input class="form-control-sm" v-model="settings.csv_prefix" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
@@ -545,19 +533,6 @@
</em>
</div>
</div>
<div class="row">
<div class="col col-md-6">{{ $t("left_handed") }}</div>
<div class="col col-md-6">
<input type="checkbox" class="form-control settings-checkbox" v-model="settings.left_handed" @change="saveSettings" />
</div>
</div>
<div class="row sm mb-3">
<div class="col">
<em class="small text-muted">
{{ $t("left_handed_help") }}
</em>
</div>
</div>
</b-card>
</div>
</div>
@@ -612,23 +587,26 @@
<ContextMenu ref="menu">
<template #menu="{ contextData }">
<ContextMenuItem>
<b-input-group>
<template #prepend>
<span class="dropdown-item p-2 text-decoration-none" style="user-select: none !important"><i class="fas fa-cubes"></i> {{ $t("MoveCategory") }}</span>
</template>
<b-form-select
class="form-control mt-1 mr-1"
:options="shopping_categories"
text-field="name"
value-field="id"
v-model="shopcat"
@change="
moveEntry($event, contextData)
$refs.menu.close()
"
></b-form-select>
</b-input-group>
<b-row class="d-flex align-items-center mr-0">
<b-col cols="6">
<a class="dropdown-item p-2" href="#"><i class="fas fa-cubes"></i> {{ $t("MoveCategory") }}</a>
</b-col>
<b-col cols="6 pl-1">
<b-form-select
class="form-control form-control-sm"
:options="shopping_categories"
text-field="name"
value-field="id"
v-model="shopcat"
@change="
moveEntry($event, contextData)
$refs.menu.close()
"
></b-form-select>
</b-col>
</b-row>
</ContextMenuItem>
<ContextMenuItem
@click="
$refs.menu.close()
@@ -706,7 +684,6 @@ export default {
DownloadPDF,
DownloadCSV,
CopyToClipboard,
ShoppingModal,
},
data() {
@@ -736,13 +713,11 @@ export default {
csv_delim: ",",
csv_prefix: undefined,
shopping_add_onhand: true,
left_handed: false,
},
new_supermarket: { entrymode: false, value: undefined, editmode: undefined },
new_category: { entrymode: false, value: undefined },
autosync_id: undefined,
auto_sync_running: false, // track to not start a new sync before old one was finished
auto_sync_blocked: false, // blocking auto sync while request to check item is still running
auto_sync_running: false,
show_delay: false,
drag: false,
show_modal: false,
@@ -751,10 +726,6 @@ export default {
entrymode: false,
new_item: { amount: 1, unit: undefined, food: undefined, ingredient: undefined },
online: true,
new_recipe: {
id: undefined,
},
add_recipe_servings: 1,
}
},
computed: {
@@ -792,9 +763,6 @@ export default {
var groups = { false: {}, true: {} } // force unchecked to always be first
if (this.selected_supermarket) {
// TODO: make nulls_first a user setting
groups.false[this.$t("Undefined")] = {}
groups.true[this.$t("Undefined")] = {}
let super_cats = this.supermarkets
.filter((x) => x.id === this.selected_supermarket)
.map((x) => x.category_to_supermarket)
@@ -805,6 +773,9 @@ export default {
groups["true"][cat] = {}
})
} else {
// TODO: make nulls_first a user setting
groups.false[this.$t("Undefined")] = {}
groups.true[this.$t("Undefined")] = {}
this.shopping_categories.forEach((cat) => {
groups.false[cat.name] = {}
groups.true[cat.name] = {}
@@ -853,8 +824,7 @@ export default {
return (this.itemsDelayed && !this.show_delay) || !this.show_undefined_categories || (this.supermarket_categories_only && this.selected_supermarket)
},
Recipes() {
// hiding recipes associated with shopping list items that are complete
return [...new Map(this.items.filter((x) => x.list_recipe && !x.checked).map((item) => [item["list_recipe"], item])).values()]
return [...new Map(this.items.filter((x) => x.list_recipe).map((item) => [item["list_recipe"], item])).values()]
},
supermarketCategory() {
return this.new_supermarket.editmode ? this.new_supermarket.value.category_to_supermarket : this.shopping_categories
@@ -880,12 +850,6 @@ export default {
this.supermarket_categories_only = this.settings.filter_to_supermarket
localStorage.setItem("shopping_v2_selected_supermarket", JSON.stringify(this.selected_supermarket))
},
new_recipe: {
handler() {
this.add_recipe_servings = this.new_recipe.servings
},
deep: true,
},
"settings.filter_to_supermarket": function (newVal, oldVal) {
this.supermarket_categories_only = this.settings.filter_to_supermarket
},
@@ -938,21 +902,14 @@ export default {
// this.genericAPI inherited from ApiMixin
addItem: function () {
if (this.entry_mode_simple) {
if (this.new_item.ingredient !== "" && this.new_item.ingredient !== undefined) {
this.genericPostAPI("api_ingredient_from_string", { text: this.new_item.ingredient }).then((result) => {
let unit = null
if (result.data.unit !== "") {
unit = { name: result.data.unit }
}
this.new_item = {
amount: result.data.amount,
unit: unit,
food: { name: result.data.food },
}
this.addEntry()
})
}
this.genericPostAPI("api_ingredient_from_string", { text: this.new_item.ingredient }).then((result) => {
this.new_item = {
amount: result.data.amount,
unit: { name: result.data.unit },
food: { name: result.data.food },
}
this.addEntry()
})
} else {
this.addEntry()
}
@@ -1109,9 +1066,7 @@ export default {
}
this.loading = false
} else {
if (!this.auto_sync_blocked) {
this.mergeShoppingList(results.data)
}
this.mergeShoppingList(results.data)
}
})
.catch((err) => {
@@ -1140,15 +1095,6 @@ export default {
})
)
this.auto_sync_running = false
let new_entries = data.map((x) => x.id).filter((y) => !this.items.map((z) => z.id).includes(y))
if (new_entries.length > 0) {
let api = new ApiApiFactory()
new_entries.forEach((new_id) => {
api.retrieveShoppingListEntry(new_id).then((result) => {
this.items.push(result.data)
})
})
}
},
moveEntry: function (e, item) {
if (!e) {
@@ -1243,7 +1189,6 @@ export default {
},
updateChecked: function (update) {
// when checking a sub item don't refresh the screen until all entries complete but change class to cross out
this.auto_sync_blocked = true
let promises = []
update.entries.forEach((x) => {
const id = x?.id ?? x
@@ -1258,20 +1203,15 @@ export default {
Vue.set(item, "completed_at", completed_at)
})
Promise.all(promises)
.then(() => {
this.auto_sync_blocked = false
})
.catch((err) => {
this.auto_sync_blocked = false
console.log(err, err.response)
StandardToasts.makeStandardToast(StandardToasts.FAIL_UPDATE)
})
Promise.all(promises).catch((err) => {
console.log(err, err.response)
StandardToasts.makeStandardToast(StandardToasts.FAIL_UPDATE)
})
},
updateFood: function (food, field) {
let api = new ApiApiFactory()
if (field) {
// assume if field is changing it should no longer be inherited
// assume if field is changing it should no longer be inheritted
food.inherit_fields = food.inherit_fields.filter((x) => x.field !== field)
}
@@ -1469,12 +1409,12 @@ export default {
background: #c8ebfb;
}
.slide-fade-enter-active,
.slide-fade-leave-active {
transition: all 0.2s ease;
.slider-fade-enter-active,
.slider-fade-leave-active {
transition: all 0.3s ease;
}
.slide-fade-enter, .slide-fade-leave-to
.slider-fade-enter, .slider-fade-leave-to
/* .slider-fade-leave-active below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;