From 54a2a4595952d594b1dfd942855e2f57a2fad581 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Thu, 14 Oct 2021 11:20:30 +0200 Subject: [PATCH] completed migration of file view to generic model list --- cookbook/templates/base.html | 15 +++ cookbook/templates/files.html | 39 ------ .../templates/generic/model_template.html | 10 +- cookbook/urls.py | 1 - cookbook/views/lists.py | 13 +- cookbook/views/views.py | 11 -- vue/src/apps/ModelListView/ModelListView.vue | 20 +++- vue/src/apps/UserFileView/UserFileView.vue | 111 ------------------ vue/src/apps/UserFileView/main.js | 10 -- vue/src/components/BetaWarning.vue | 16 +++ vue/src/components/ModelMenu.vue | 6 +- vue/src/components/StorageQuota.vue | 51 ++++++++ vue/src/locales/en.json | 1 + vue/src/utils/models.js | 10 ++ vue/vue.config.js | 4 - 15 files changed, 130 insertions(+), 188 deletions(-) delete mode 100644 cookbook/templates/files.html delete mode 100644 vue/src/apps/UserFileView/UserFileView.vue delete mode 100644 vue/src/apps/UserFileView/main.js create mode 100644 vue/src/components/BetaWarning.vue create mode 100644 vue/src/components/StorageQuota.vue diff --git a/cookbook/templates/base.html b/cookbook/templates/base.html index 40ac0ea16..1976ef331 100644 --- a/cookbook/templates/base.html +++ b/cookbook/templates/base.html @@ -179,6 +179,18 @@
+ + +
+
diff --git a/cookbook/templates/files.html b/cookbook/templates/files.html deleted file mode 100644 index 80421210c..000000000 --- a/cookbook/templates/files.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "base.html" %} -{% load render_bundle from webpack_loader %} -{% load static %} -{% load i18n %} -{% load l10n %} - -{% block title %}{% trans 'Files' %}{% endblock %} - -{% block extra_head %} - -{% endblock %} - -{% block content %} - -
- -
- - -{% endblock %} - - -{% block script %} - {% if debug %} - - {% else %} - - {% endif %} - - - - {% render_bundle 'user_file_view' %} -{% endblock %} \ No newline at end of file diff --git a/cookbook/templates/generic/model_template.html b/cookbook/templates/generic/model_template.html index 4d18bd183..c97556259 100644 --- a/cookbook/templates/generic/model_template.html +++ b/cookbook/templates/generic/model_template.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load l10n %} {% load render_bundle from webpack_loader %} {% load static %} {% load i18n %} @@ -7,7 +8,7 @@ {% block content_fluid %} -
+
@@ -17,7 +18,7 @@ {% block script %} {{ config | json_script:"model_config" }} - + {% if debug %} {% else %} @@ -26,6 +27,11 @@ {% render_bundle 'model_list_view' %} diff --git a/cookbook/urls.py b/cookbook/urls.py index f66d487da..80537c8d0 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -67,7 +67,6 @@ urlpatterns = [ path('settings/', views.user_settings, name='view_settings'), path('history/', views.history, name='view_history'), path('supermarket/', views.supermarket, name='view_supermarket'), - path('files/', views.files, name='view_files'), path('abuse/', views.report_share_abuse, name='view_report_share_abuse'), path('test/', views.test, name='view_test'), path('test2/', views.test2, name='view_test2'), diff --git a/cookbook/views/lists.py b/cookbook/views/lists.py index 4fd547d71..87ceb802a 100644 --- a/cookbook/views/lists.py +++ b/cookbook/views/lists.py @@ -1,6 +1,6 @@ from datetime import datetime -from django.db.models import Q +from django.db.models import Q, Sum from django.shortcuts import render from django.utils.translation import gettext as _ from django_tables2 import RequestConfig @@ -8,7 +8,7 @@ from django_tables2 import RequestConfig from cookbook.filters import ShoppingListFilter from cookbook.helper.permission_helper import group_required from cookbook.models import (InviteLink, RecipeImport, - ShoppingList, Storage, SyncLog) + ShoppingList, Storage, SyncLog, UserFile) from cookbook.tables import (ImportLogTable, InviteLinkTable, RecipeImportTable, ShoppingListTable, StorageTable) @@ -202,6 +202,12 @@ def automation(request): @group_required('user') def user_file(request): + try: + current_file_size_mb = UserFile.objects.filter(space=request.space).aggregate(Sum('file_size_kb'))[ + 'file_size_kb__sum'] / 1000 + except TypeError: + current_file_size_mb = 0 + return render( request, 'generic/model_template.html', @@ -209,7 +215,8 @@ def user_file(request): "title": _("Files"), "config": { 'model': "USERFILE", # *REQUIRED* name of the model in models.js - } + }, + 'current_file_size_mb': current_file_size_mb, 'max_file_size_mb': request.space.max_file_storage_mb } ) diff --git a/cookbook/views/views.py b/cookbook/views/views.py index a2f5669a0..0ccd54612 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -230,17 +230,6 @@ def supermarket(request): return render(request, 'supermarket.html', {}) -@group_required('user') -def files(request): - try: - current_file_size_mb = UserFile.objects.filter(space=request.space).aggregate(Sum('file_size_kb'))[ - 'file_size_kb__sum'] / 1000 - except TypeError: - current_file_size_mb = 0 - return render(request, 'files.html', - {'current_file_size_mb': current_file_size_mb, 'max_file_size_mb': request.space.max_file_storage_mb}) - - @group_required('user') def meal_plan_entry(request, pk): plan = MealPlan.objects.filter(space=request.space).get(pk=pk) diff --git a/vue/src/apps/ModelListView/ModelListView.vue b/vue/src/apps/ModelListView/ModelListView.vue index 865a29052..7f8a40543 100644 --- a/vue/src/apps/ModelListView/ModelListView.vue +++ b/vue/src/apps/ModelListView/ModelListView.vue @@ -15,12 +15,10 @@
-
+ +
- - BETA - {{ $t('warning_feature_beta') }} - +
@@ -109,6 +107,7 @@ import GenericHorizontalCard from "@/components/GenericHorizontalCard"; import GenericModalForm from "@/components/Modals/GenericModalForm"; import ModelMenu from "@/components/ModelMenu"; import {ApiApiFactory} from "@/utils/openapi/api"; +//import StorageQuota from "@/components/StorageQuota"; Vue.use(BootstrapVue) @@ -117,7 +116,9 @@ export default { // or i'm capturing it incorrectly name: 'ModelListView', mixins: [CardMixin, ApiMixin, ToastMixin], - components: {GenericHorizontalCard, GenericModalForm, GenericInfiniteCards, ModelMenu}, + components: { + GenericHorizontalCard, GenericModalForm, GenericInfiniteCards, ModelMenu, + }, data() { return { // this.Models and this.Actions inherited from ApiMixin @@ -134,6 +135,12 @@ export default { show_modal: false, show_split: false, paginated: false, + header_component_name: undefined, + } + }, + computed: { + headerComponent() { + return () => import(`@/components/${this.header_component_name}`) } }, mounted() { @@ -142,6 +149,7 @@ export default { this.this_model = this.Models[model_config?.model] this.this_recipe_param = model_config?.recipe_param this.paginated = this.this_model?.paginated ?? false + this.header_component_name = this.this_model?.list?.header_component?.name ?? undefined this.$nextTick(() => { if (!this.paginated) { this.getItems({page:1},'left') diff --git a/vue/src/apps/UserFileView/UserFileView.vue b/vue/src/apps/UserFileView/UserFileView.vue deleted file mode 100644 index be9a82199..000000000 --- a/vue/src/apps/UserFileView/UserFileView.vue +++ /dev/null @@ -1,111 +0,0 @@ - - - - - diff --git a/vue/src/apps/UserFileView/main.js b/vue/src/apps/UserFileView/main.js deleted file mode 100644 index 6493ae903..000000000 --- a/vue/src/apps/UserFileView/main.js +++ /dev/null @@ -1,10 +0,0 @@ -import Vue from 'vue' -import App from './UserFileView.vue' -import i18n from '@/i18n' - -Vue.config.productionTip = false - -new Vue({ - i18n, - render: h => h(App), -}).$mount('#app') diff --git a/vue/src/components/BetaWarning.vue b/vue/src/components/BetaWarning.vue new file mode 100644 index 000000000..5607c3967 --- /dev/null +++ b/vue/src/components/BetaWarning.vue @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/vue/src/components/ModelMenu.vue b/vue/src/components/ModelMenu.vue index 5768adf7f..cc74e1676 100644 --- a/vue/src/components/ModelMenu.vue +++ b/vue/src/components/ModelMenu.vue @@ -28,7 +28,11 @@ {{ Models['AUTOMATION'].name }} - + + + + {{ Models['USERFILE'].name }} + diff --git a/vue/src/components/StorageQuota.vue b/vue/src/components/StorageQuota.vue new file mode 100644 index 000000000..c62558f46 --- /dev/null +++ b/vue/src/components/StorageQuota.vue @@ -0,0 +1,51 @@ + + + + + \ No newline at end of file diff --git a/vue/src/locales/en.json b/vue/src/locales/en.json index 4bb7c6efc..b50b38e39 100644 --- a/vue/src/locales/en.json +++ b/vue/src/locales/en.json @@ -8,6 +8,7 @@ "success_creating_resource": "Successfully created a resource!", "success_updating_resource": "Successfully updated a resource!", "success_deleting_resource": "Successfully deleted a resource!", + "file_upload_disabled": "File upload is not enabled for your space.", "step_time_minutes": "Step time in minutes", "confirm_delete": "Are you sure you want to delete this {object}?", "import_running": "Import running, please wait!", diff --git a/vue/src/utils/models.js b/vue/src/utils/models.js index b03b5c828..94cb50683 100644 --- a/vue/src/utils/models.js +++ b/vue/src/utils/models.js @@ -308,6 +308,11 @@ export class Models { 'name': i18n.t('Automation'), 'apiName': 'Automation', 'paginated': true, + 'list': { + 'header_component': { + 'name': 'BetaWarning' + }, + }, 'create': { 'params': [['name', 'description', 'type', 'param_1', 'param_2', 'param_3']], 'form': { @@ -407,6 +412,11 @@ export class Models { 'name': i18n.t('File'), 'apiName': 'UserFile', 'paginated': false, + 'list': { + 'header_component': { + 'name': 'StorageQuota' + }, + }, 'create': { 'params': ['name', 'file',], 'form': { diff --git a/vue/vue.config.js b/vue/vue.config.js index 9536e616f..beb599d1a 100644 --- a/vue/vue.config.js +++ b/vue/vue.config.js @@ -21,10 +21,6 @@ const pages = { entry: './src/apps/SupermarketView/main.js', chunks: ['chunk-vendors'] }, - 'user_file_view': { - entry: './src/apps/UserFileView/main.js', - chunks: ['chunk-vendors'] - }, 'model_list_view': { entry: './src/apps/ModelListView/main.js', chunks: ['chunk-vendors']