remotes/origin/hotfix/LIL-691
gzbender 7 years ago
parent ddb3bdf723
commit 2a1d515104
  1. 96
      api/v1/serializers/mixins.py
  2. 19
      web/src/components/blocks/BlockImages.vue
  3. 31
      web/src/js/modules/api.js

@ -32,35 +32,23 @@ class DispatchContentMixin(object):
if 'id' in cdata and cdata['id']: if 'id' in cdata and cdata['id']:
t = Text.objects.get(id=cdata.pop('id')) t = Text.objects.get(id=cdata.pop('id'))
serializer = TextCreateSerializer(t, data=cdata) serializer = TextCreateSerializer(t, data=cdata)
if serializer.is_valid():
serializer.save()
else: else:
serializer = TextCreateSerializer(data=cdata) serializer = TextCreateSerializer(data=cdata)
if serializer.is_valid(): if serializer.is_valid():
serializer.save() serializer.save()
elif ctype == 'image': elif ctype == 'image':
if 'id' in cdata and cdata['id']: if 'id' in cdata and cdata['id']:
image = Image.objects.get(id=cdata.pop('id')) image = Image.objects.get(id=cdata.pop('id'))
serializer = ImageCreateSerializer(image, data=cdata) serializer = ImageCreateSerializer(image, data=cdata)
if serializer.is_valid():
image = serializer.save()
else:
continue
try:
image_object = ImageObject.objects.get(id=cdata['img'])
except ImageObject.DoesNotExist:
pass
else:
image.img = image_object
image.save()
else: else:
serializer = ImageCreateSerializer(data=cdata) serializer = ImageCreateSerializer(data=cdata)
if serializer.is_valid(): if serializer.is_valid():
image = serializer.save() image = serializer.save()
else: else:
continue continue
if 'img' in cdata:
try: try:
image_object = ImageObject.objects.get(id=cdata['img']) image_object = ImageObject.objects.get(id=cdata.get('img'))
except ImageObject.DoesNotExist: except ImageObject.DoesNotExist:
pass pass
else: else:
@ -71,25 +59,15 @@ class DispatchContentMixin(object):
if 'id' in cdata and cdata['id']: if 'id' in cdata and cdata['id']:
it = ImageText.objects.get(id=cdata.pop('id')) it = ImageText.objects.get(id=cdata.pop('id'))
serializer = ImageTextCreateSerializer(it, data=cdata) serializer = ImageTextCreateSerializer(it, data=cdata)
if serializer.is_valid():
it = serializer.save()
else:
continue
try:
image_object = ImageObject.objects.get(id=cdata['img'])
except ImageObject.DoesNotExist:
pass
else:
it.img = image_object
it.save()
else: else:
serializer = ImageTextCreateSerializer(data=cdata) serializer = ImageTextCreateSerializer(data=cdata)
if serializer.is_valid(): if serializer.is_valid():
it = serializer.save() it = serializer.save()
else: else:
continue continue
if 'img' in cdata:
try: try:
image_object = ImageObject.objects.get(id=cdata['img']) image_object = ImageObject.objects.get(id=cdata.get('img'))
except ImageObject.DoesNotExist: except ImageObject.DoesNotExist:
pass pass
else: else:
@ -100,52 +78,36 @@ class DispatchContentMixin(object):
if 'id' in cdata and cdata['id']: if 'id' in cdata and cdata['id']:
v = Video.objects.get(id=cdata.pop('id')) v = Video.objects.get(id=cdata.pop('id'))
serializer = VideoCreateSerializer(v, data=cdata) serializer = VideoCreateSerializer(v, data=cdata)
if serializer.is_valid():
serializer.save()
else: else:
serializer = VideoCreateSerializer(data=cdata) serializer = VideoCreateSerializer(data=cdata)
if serializer.is_valid(): if serializer.is_valid():
serializer.save() serializer.save()
elif ctype == 'images': elif ctype == 'images':
if 'id' in cdata and cdata['id']: if 'id' in cdata and cdata['id']:
g = Gallery.objects.get(id=cdata['id']) g = Gallery.objects.get(id=cdata['id'])
g.position = cdata['position'] g.position = cdata['position']
g.title = cdata['title'] g.title = cdata['title']
g.uuid = cdata['uuid'] g.uuid = cdata['uuid']
setattr(g, obj_type, obj)
g.save() g.save()
if 'images' in cdata:
for image in cdata['gallery_images']:
if 'img' in image and image['img']:
if 'id' in image and image['id']:
gi = GalleryImage.objects.get(id=image['id'])
gi.img = ImageObject.objects.get(id=image['img'])
gi.save()
else:
gi = GalleryImage.objects.create(
gallery=g,
img=ImageObject.objects.get(id=image['img'])
)
else: else:
g = Gallery( g = Gallery(
position=cdata['position'], position=cdata['position'],
title=cdata['title'], title=cdata['title'],
uuid=cdata['uuid'], uuid=cdata['uuid'],
) )
setattr(g, obj_type, obj) setattr(g, obj_type, obj)
g.save() if 'gallery_images' in cdata:
if 'images' in cdata: for image in cdata['gallery_images']:
for image in cdata['images']: if 'img' in image and image['img']:
if 'img' in image and image['img']: if 'id' in image and image['id']:
if 'id' in image and image['id']: gi = GalleryImage.objects.get(id=image['id'])
gi = GalleryImage.objects.get(id=image['id']) gi.img = ImageObject.objects.get(id=image['img'])
gi.img = ImageObject.objects.get(id=image['img']) gi.save()
gi.save() else:
else: gi = GalleryImage.objects.create(
gi = GalleryImage.objects.create( gallery=g,
gallery=g, img=ImageObject.objects.get(id=image['img'])
img=ImageObject.objects.get(id=image['img']) )
)
class DispatchMaterialMixin(object): class DispatchMaterialMixin(object):

@ -23,7 +23,7 @@
</div> </div>
<div class="kit__gallery"> <div class="kit__gallery">
<div class="kit__preview" v-for="(image, index) in images" v-bind:class="{ 'kit__preview--loading': image.loading }"> <div class="kit__preview" v-for="(image, index) in images" v-bind:class="{ 'kit__preview--loading': image.loading }">
<img :src="image.img.image_thumbnail" class="kit__pic"> <img v-if="image.img && image.img.image_thumbnail" :src="image.img.image_thumbnail" class="kit__pic">
<button type="button" @click="onRemoveImage(index)"> <button type="button" @click="onRemoveImage(index)">
<svg class="icon icon-delete"> <svg class="icon icon-delete">
<use xlink:href="/static/img/sprite.svg#icon-delete"></use> <use xlink:href="/static/img/sprite.svg#icon-delete"></use>
@ -51,6 +51,7 @@
this.$emit('update:title', event.target.value); this.$emit('update:title', event.target.value);
}, },
onImageAdded(event) { onImageAdded(event) {
const gallery = this.images[0].gallery;
Array.from(event.target.files).forEach((file) => { Array.from(event.target.files).forEach((file) => {
let reader = new FileReader(); let reader = new FileReader();
reader.onload = () => { reader.onload = () => {
@ -58,19 +59,27 @@
console.log('images before before', JSON.stringify(images)); console.log('images before before', JSON.stringify(images));
images.push({ images.push({
gallery,
img_file: reader.result, img_file: reader.result,
img: {}, img: {
id: null,
image_thumbnail: '',
},
loading: true, loading: true,
}); });
// this.$emit('update:images', images); this.$emit('update:images', images);
api.uploadImage(reader.result, this.accessToken) api.uploadImage(reader.result, this.accessToken)
.then((response) => { .then((response) => {
let images = this.images; let images = this.images;
console.log('images before', JSON.stringify(images)); /*console.log('images before', JSON.stringify(images));
images.push({
gallery,
img: response.data,
});*/
images.forEach((image, index) => { images.forEach((image, index) => {
if (image.img_file === reader.result) { if (image.img_file === reader.result) {
images[index].img_file = null; delete images[index]['img_file'];
images[index].img = response.data; images[index].img = response.data;
images[index].loading = false; images[index].loading = false;
} }

@ -204,10 +204,15 @@ export const api = {
const position = ++index; const position = ++index;
const data = Object.assign({position}, block); const data = Object.assign({position}, block);
if (['image', 'image-text'].indexOf(data.type) > -1) { if (['image', 'image-text'].indexOf(data.type) > -1) {
data.img = data.img.id; data.img = data.img && data.img.id;
} }
else if (data.type === 'images') { else if (data.type === 'images') {
data.gallery_images = data.gallery_images.map(image => image.id); data.gallery_images = data.gallery_images.map(image => {
return {
id: image.id,
img: image.img && image.img.id,
};
});
} }
else if (data.type === 'video') { else if (data.type === 'video') {
data.url = data.video_url; data.url = data.video_url;
@ -226,6 +231,28 @@ export const api = {
return 1; return 1;
} }
return 0; return 0;
}).map(block => {
const templates = {
image: {
img: {},
},
'image-text': {
txt: '',
img: {},
},
images: {
gallery_images: [],
},
video: {
video_url: '',
},
text: {
txt: '',
}
}
return Object.assign({
type: '', id: null, uuid: '', title: '',
}, templates[block.type], block);
}); });
}, },
addCourse: (courseJson, accessToken) => { addCourse: (courseJson, accessToken) => {

Loading…
Cancel
Save