import response view

This commit is contained in:
vabene1111 2021-03-18 20:00:13 +01:00
parent de9456e3d7
commit 8a051b531d
13 changed files with 181 additions and 6 deletions

View File

@ -109,7 +109,7 @@ class Integration:
il.msg += 'ERROR ' + _('Importer expected a .zip file. Did you choose the correct importer type for your data ?') + '\n' il.msg += 'ERROR ' + _('Importer expected a .zip file. Did you choose the correct importer type for your data ?') + '\n'
if len(ignored_recipes) > 0: if len(ignored_recipes) > 0:
il.msg += _('The following recipes were ignored because they already existed:') + ' ' + ', '.join(ignored_recipes) + '\n' il.msg += '\n' + _('The following recipes were ignored because they already existed:') + ' ' + ', '.join(ignored_recipes) + '\n\n'
il.keyword = self.keyword il.keyword = self.keyword
il.msg += (_('Imported %s recipes.') % Recipe.objects.filter(keywords=self.keyword).count()) + '\n' il.msg += (_('Imported %s recipes.') % Recipe.objects.filter(keywords=self.keyword).count()) + '\n'

View File

@ -0,0 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Vue App</title><link href="css/chunk-vendors.css" rel="preload" as="style"><link href="js/chunk-vendors.js" rel="preload" as="script"><link href="js/import_response_view.js" rel="preload" as="script"><link href="css/chunk-vendors.css" rel="stylesheet"><link rel="icon" type="image/png" sizes="32x32" href="img/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="img/icons/favicon-16x16.png"><link rel="manifest" href="manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-mobile-web-app-title" content="Recipes"><link rel="apple-touch-icon" href="img/icons/apple-touch-icon-152x152.png"><link rel="mask-icon" href="img/icons/safari-pinned-tab.svg" color="#4DBA87"><meta name="msapplication-TileImage" content="img/icons/msapplication-icon-144x144.png"><meta name="msapplication-TileColor" content="#000000"></head><body><div id="app"></div><script src="js/chunk-vendors.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,34 @@
{% extends "base.html" %}
{% load render_bundle from webpack_loader %}
{% load static %}
{% load i18n %}
{% load l10n %}
{% block title %}{% trans 'Import' %}{% endblock %}
{% block content %}
<div id="app">
<import-response-view></import-response-view>
</div>
{% endblock %}
{% block script %}
<script src="{% url 'javascript-catalog' %}"></script>
{% if debug %}
<script src="{% url 'js_reverse' %}"></script>
{% else %}
<script src="{% static 'django_js_reverse/reverse.js' %}"></script>
{% endif %}
<script type="application/javascript">
window.IMPORT_ID = {{pk}};
</script>
{% render_bundle 'chunk-vendors' %}
{% render_bundle 'import_response_view' %}
{% endblock %}

File diff suppressed because one or more lines are too long

View File

@ -58,6 +58,7 @@ urlpatterns = [
path('test2/', views.test2, name='view_test2'), path('test2/', views.test2, name='view_test2'),
path('import/', import_export.import_recipe, name='view_import'), path('import/', import_export.import_recipe, name='view_import'),
path('import-response/<int:pk>/', import_export.import_response, name='view_import_response'),
path('export/', import_export.export_recipe, name='view_export'), path('export/', import_export.export_recipe, name='view_export'),
path('view/recipe/<int:pk>', views.recipe_view, name='view_recipe'), path('view/recipe/<int:pk>', views.recipe_view, name='view_recipe'),

View File

@ -3,7 +3,9 @@ import threading
from io import BytesIO from io import BytesIO
from django.contrib import messages from django.contrib import messages
from django.http import HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from cookbook.forms import ExportForm, ImportForm, ImportExportBase from cookbook.forms import ExportForm, ImportForm, ImportExportBase
@ -48,8 +50,7 @@ def import_recipe(request):
t.setDaemon(True) t.setDaemon(True)
t.start() t.start()
messages.add_message(request, messages.SUCCESS, 'Import started') return HttpResponseRedirect(reverse('view_import_response', args=[il.pk]))
return render(request, 'import.html', {'form': form})
except NotImplementedError: except NotImplementedError:
messages.add_message(request, messages.ERROR, _('Importing is not implemented for this provider')) messages.add_message(request, messages.ERROR, _('Importing is not implemented for this provider'))
else: else:
@ -78,3 +79,8 @@ def export_recipe(request):
form = ExportForm(initial={'recipes': recipe}, space=request.space) form = ExportForm(initial={'recipes': recipe}, space=request.space)
return render(request, 'export.html', {'form': form}) return render(request, 'export.html', {'form': form})
@group_required('user')
def import_response(request, pk):
return render(request, 'import_response.html', {'pk': pk})

View File

@ -0,0 +1,110 @@
<template>
<div id="app">
<div class="row">
<div class="col col-md-12">
<h2>{{ _('Import') }}</h2>
</div>
</div>
<br/>
<br/>
<template v-if="import_info !== undefined">
<template v-if="import_info.running" style="text-align: center;">
<div class="row">
<div class="col col-md-12">
</div>
</div>
<loading-spinner></loading-spinner>
<br/>
<br/>
<h5 style="text-align: center">{{ _('Import running, please wait!') }}</h5>
</template>
<template v-else>
<div class="row">
<div class="col col-md-12">
<span>{{ _('Import finished') }}! </span>
<a :href="`${resolveDjangoUrl('view_search') }?keywords=${import_info.keyword.id}`"
v-if="import_info.keyword !== null">{{ _('View Recipes') }}</a>
</div>
</div>
<br/>
<div class="row">
<div class="col col-md-12">
<label for="id_textarea">{{ _('Information') }}</label>
<textarea id="id_textarea" class="form-control" style="height: 50vh" v-html="import_info.msg"
disabled></textarea>
</div>
</div>
</template>
</template>
</div>
</template>
<script>
import Vue from 'vue'
import {BootstrapVue} from 'bootstrap-vue'
import 'bootstrap-vue/dist/bootstrap-vue.css'
import {GettextMixin, ResolveUrlMixin, ToastMixin} from "@/utils/utils";
import {apiLoadImportLog} from "@/utils/api";
import LoadingSpinner from "@/components/LoadingSpinner";
Vue.use(BootstrapVue)
export default {
name: 'ImportResponseView',
mixins: [
GettextMixin,
ResolveUrlMixin,
ToastMixin,
],
components: {
LoadingSpinner
},
data() {
return {
import_id: window.IMPORT_ID,
import_info: undefined,
}
},
mounted() {
this.refreshData()
setInterval(() => {
if ((this.import_id !== null) && window.navigator.onLine && this.import_info.running) {
this.refreshData()
}
}, 5000)
},
methods: {
refreshData: function () {
apiLoadImportLog(this.import_id).then(data => {
this.import_info = data
})
}
}
}
</script>
<style>
</style>

View File

@ -0,0 +1,8 @@
import Vue from 'vue'
import App from './ImportResponseView.vue'
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')

View File

@ -18,6 +18,16 @@ export function apiLoadRecipe(recipe_id) {
}) })
} }
export function apiLoadImportLog(id) {
let url = resolveDjangoUrl('api:importlog-detail', id)
return axios.get(url).then((response) => {
return response.data
}).catch((err) => {
handleError(err, 'There was an error loading a resource!', 'danger')
})
}
export function apiLogCooking(cook_log) { export function apiLogCooking(cook_log) {
return axios.post(resolveDjangoUrl('api:cooklog-list',), cook_log).then((response) => { return axios.post(resolveDjangoUrl('api:cooklog-list',), cook_log).then((response) => {

View File

@ -9,6 +9,10 @@ const pages = {
entry: './src/apps/OfflineView/main.js', entry: './src/apps/OfflineView/main.js',
chunks: ['chunk-vendors'] chunks: ['chunk-vendors']
}, },
'import_response_view': {
entry: './src/apps/ImportResponseView/main.js',
chunks: ['chunk-vendors']
},
} }
module.exports = { module.exports = {

View File

@ -1 +1 @@
{"status":"done","chunks":{"chunk-vendors":[{"name":"css/chunk-vendors.css","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\css\\chunk-vendors.css"},{"name":"js/chunk-vendors.js","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\js\\chunk-vendors.js"}],"offline_view":[{"name":"js/offline_view.js","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\js\\offline_view.js"}],"recipe_view":[{"name":"js/recipe_view.js","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\js\\recipe_view.js"}]}} {"status":"done","chunks":{"chunk-vendors":[{"name":"css/chunk-vendors.css","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\css\\chunk-vendors.css"},{"name":"js/chunk-vendors.js","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\js\\chunk-vendors.js"}],"import_response_view":[{"name":"js/import_response_view.js","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\js\\import_response_view.js"}],"offline_view":[{"name":"js/offline_view.js","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\js\\offline_view.js"}],"recipe_view":[{"name":"js/recipe_view.js","path":"F:\\Developement\\Django\\recipes\\cookbook\\static\\vue\\js\\recipe_view.js"}]}}