refactor ContributionForm template

This commit is contained in:
Alina Beck 2020-02-05 21:39:50 +01:00
parent e14cbf8173
commit 1d435392ff
3 changed files with 74 additions and 106 deletions

View File

@ -16,14 +16,6 @@
</ds-flex-item> </ds-flex-item>
</div> </div>
</ds-flex> </ds-flex>
<p class="small-info">
{{
$t('contribution.categories.infoSelectedNoOfMaxCategories', {
chosen: selectedCount,
max: selectedMax,
})
}}
</p>
</div> </div>
</template> </template>

View File

@ -8,94 +8,64 @@
> >
<template slot-scope="{ errors }"> <template slot-scope="{ errors }">
<base-card> <base-card>
<section class="card-image"> <section :class="['card-image', form.blurImage && '--blur-image']">
<img v-if="contribution" class="preview-image" :src="contribution.image | proxyApiUrl" /> <img v-if="contribution" class="preview-image" :src="contribution.image | proxyApiUrl" />
<teaser-image <teaser-image
:contribution="contribution" :contribution="contribution"
:class="{ '--blur-image': form.blurImage }"
@addTeaserImage="addTeaserImage" @addTeaserImage="addTeaserImage"
@addImageAspectRatio="addImageAspectRatio" @addImageAspectRatio="addImageAspectRatio"
/> />
</section> </section>
<div class="blur-toggle"> <div v-if="form.teaserImage || form.image" class="blur-toggle">
<label for="blur-img">{{ $t('contribution.inappropriatePicture') }}</label> <label for="blur-img">{{ $t('contribution.inappropriatePicture') }}</label>
<input type="checkbox" id="blur-img" v-model="form.blurImage" /> <input type="checkbox" id="blur-img" v-model="form.blurImage" />
<p>
<a <a
href="https://support.human-connection.org/kb/faq.php?id=113" href="https://support.human-connection.org/kb/faq.php?id=113"
target="_blank" target="_blank"
class="link" class="link"
> >
{{ $t('contribution.inappropriatePictureText') }} {{ $t('contribution.inappropriatePictureText') }}
<ds-icon name="question-circle" /> <base-icon name="question-circle" />
</a> </a>
</p>
</div> </div>
<ds-space />
<client-only>
<user-teaser :user="currentUser" />
</client-only>
<ds-space />
<ds-input <ds-input
model="title" model="title"
class="post-title"
:placeholder="$t('contribution.title')" :placeholder="$t('contribution.title')"
name="title" name="title"
autofocus autofocus
size="large"
/> />
<ds-text align="right"> <ds-chip size="base" :color="errors && errors.title && 'danger'">
<ds-chip v-if="errors && errors.title" color="danger" size="base">
{{ form.title.length }}/{{ formSchema.title.max }} {{ form.title.length }}/{{ formSchema.title.max }}
<ds-icon name="warning"></ds-icon> <base-icon v-if="errors && errors.title" name="warning" />
</ds-chip> </ds-chip>
<ds-chip v-else size="base">{{ form.title.length }}/{{ formSchema.title.max }}</ds-chip>
</ds-text>
<hc-editor <hc-editor
:users="users" :users="users"
:value="form.content" :value="form.content"
:hashtags="hashtags" :hashtags="hashtags"
@input="updateEditorContent" @input="updateEditorContent"
/> />
<ds-text align="right"> <ds-chip size="base" :color="errors && errors.content && 'danger'">
<ds-chip v-if="errors && errors.content" color="danger" size="base">
{{ contentLength }} {{ contentLength }}
<ds-icon name="warning"></ds-icon> <base-icon v-if="errors && errors.content" name="warning" />
</ds-chip> </ds-chip>
<ds-chip v-else size="base"> <categories-select model="categoryIds" :existingCategoryIds="form.categoryIds" />
{{ contentLength }} <ds-chip size="base" :color="errors && errors.categoryIds && 'danger'">
</ds-chip>
</ds-text>
<ds-space margin-bottom="small" />
<hc-categories-select model="categoryIds" :existingCategoryIds="form.categoryIds" />
<ds-text align="right">
<ds-chip v-if="errors && errors.categoryIds" color="danger" size="base">
{{ form.categoryIds.length }} / 3 {{ form.categoryIds.length }} / 3
<ds-icon name="warning"></ds-icon> <base-icon v-if="errors && errors.categoryIds" name="warning" />
</ds-chip> </ds-chip>
<ds-chip v-else size="base">{{ form.categoryIds.length }} / 3</ds-chip>
</ds-text>
<ds-flex class="contribution-form-footer">
<ds-flex-item :width="{ lg: '50%', md: '50%', sm: '100%' }" />
<ds-flex-item>
<ds-space margin-bottom="small" />
<ds-select <ds-select
model="language" model="language"
:options="languageOptions"
icon="globe" icon="globe"
class="select-field"
:options="languageOptions"
:placeholder="$t('contribution.languageSelectText')" :placeholder="$t('contribution.languageSelectText')"
:label="$t('contribution.languageSelectLabel')" :label="$t('contribution.languageSelectLabel')"
/> />
</ds-flex-item>
</ds-flex>
<ds-text align="right">
<ds-chip v-if="errors && errors.language" size="base" color="danger"> <ds-chip v-if="errors && errors.language" size="base" color="danger">
<ds-icon name="warning"></ds-icon> <base-icon name="warning" />
</ds-chip> </ds-chip>
</ds-text> <div class="buttons">
<ds-space />
<div style="text-align: right">
<base-button data-test="cancel-button" :disabled="loading" @click="$router.back()" danger> <base-button data-test="cancel-button" :disabled="loading" @click="$router.back()" danger>
{{ $t('actions.cancel') }} {{ $t('actions.cancel') }}
</base-button> </base-button>
@ -103,7 +73,6 @@
{{ $t('actions.save') }} {{ $t('actions.save') }}
</base-button> </base-button>
</div> </div>
<ds-space margin-bottom="large" />
</base-card> </base-card>
</template> </template>
</ds-form> </ds-form>
@ -116,16 +85,14 @@ import { mapGetters } from 'vuex'
import HcEditor from '~/components/Editor/Editor' import HcEditor from '~/components/Editor/Editor'
import locales from '~/locales' import locales from '~/locales'
import PostMutations from '~/graphql/PostMutations.js' import PostMutations from '~/graphql/PostMutations.js'
import HcCategoriesSelect from '~/components/CategoriesSelect/CategoriesSelect' import CategoriesSelect from '~/components/CategoriesSelect/CategoriesSelect'
import TeaserImage from '~/components/TeaserImage/TeaserImage' import TeaserImage from '~/components/TeaserImage/TeaserImage'
import UserTeaser from '~/components/UserTeaser/UserTeaser'
export default { export default {
components: { components: {
HcEditor, HcEditor,
HcCategoriesSelect, CategoriesSelect,
TeaserImage, TeaserImage,
UserTeaser,
}, },
props: { props: {
contribution: { type: Object, default: () => {} }, contribution: { type: Object, default: () => {} },
@ -194,12 +161,12 @@ export default {
} }
}, },
computed: { computed: {
contentLength() {
return this.$filters.removeHtml(this.form.content).length
},
...mapGetters({ ...mapGetters({
currentUser: 'auth/user', currentUser: 'auth/user',
}), }),
contentLength() {
return this.$filters.removeHtml(this.form.content).length
},
}, },
methods: { methods: {
submit() { submit() {
@ -293,8 +260,38 @@ export default {
<style lang="scss"> <style lang="scss">
.contribution-form { .contribution-form {
.card-image { > .base-card {
display: flex;
flex-direction: column;
> .card-image {
position: relative; position: relative;
overflow: hidden;
margin-bottom: $space-xx-small;
&.--blur-image img {
filter: blur(22px);
}
}
> .ds-form-item {
margin: 0;
}
> .ds-chip {
align-self: flex-end;
margin: $space-xx-small 0 $space-base;
cursor: default;
}
> .select-field {
align-self: flex-end;
}
> .buttons {
align-self: flex-end;
margin-top: $space-base;
}
} }
.preview-image { .preview-image {
@ -305,27 +302,11 @@ export default {
.blur-toggle { .blur-toggle {
text-align: right; text-align: right;
margin-bottom: $space-base;
> .link { > .link {
display: block; display: block;
} }
} }
.ds-chip {
cursor: default;
}
.post-title {
margin-top: $space-x-small;
margin-bottom: $space-xx-small;
input {
border: 0;
font-size: $font-size-x-large;
font-weight: bold;
padding-left: 0;
padding-right: 0;
}
}
} }
</style> </style>

View File

@ -106,7 +106,6 @@ export default {
.image-uploader { .image-uploader {
position: relative; position: relative;
min-height: 200px; min-height: 200px;
overflow: hidden;
cursor: pointer; cursor: pointer;
&:only-child { &:only-child {
@ -117,10 +116,6 @@ export default {
pointer-events: none; pointer-events: none;
} }
&.--blur-image img {
filter: blur(22px);
}
.preview-image + & { .preview-image + & {
position: absolute; position: absolute;
top: 0; top: 0;