This commit is contained in:
ogerly 2022-09-09 11:11:15 +02:00
parent 362aae3c5b
commit 109a5f5aa4
3 changed files with 204 additions and 207 deletions

View File

@ -11,7 +11,6 @@
</transition>
</ds-flex-item>
</ds-flex>
</div>
</template>
@ -20,22 +19,22 @@ import { groupQuery, updateGroupMutation } from '~/graphql/groups.js'
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters({
user: 'auth/user',
}),
routes() {
return [
{
name: 'formular',
path: `/group/edit/${this.group.id}`
},
{
name: 'members',
path: `/group/edit/${this.group.id}/members`
},
]},
{
name: 'formular',
path: `/group/edit/${this.group.id}`,
},
{
name: 'members',
path: `/group/edit/${this.group.id}/members`,
},
]
},
},
async asyncData(context) {
const {

View File

@ -1,150 +1,149 @@
<template>
<div>
<ds-container>
<ds-form
class="group-form"
ref="groupForm"
v-model="formData"
:schema="formSchema"
@submit="submit"
>
<ds-input
v-model="formData.name"
label="Gruppenname"
placeholder="Your name ..."
></ds-input>
<ds-select
icon="user"
v-model="formData.groupType"
label="Sichtbarkeit"
:options="['public', 'close', 'hidden']"
placeholder="Status ..."
></ds-select>
<ds-input v-model="formData.about" label="Kurzbeschreibung" rows="3"></ds-input>
<ds-input
v-model="formData.description"
label="Beschreibung"
type="textarea"
rows="3"
></ds-input>
<ds-select
icon="card"
v-model="formData.actionRadius"
label="Radius"
:options="['local', 'regional', 'global']"
placeholder="Radius ..."
></ds-select>
<categories-select
v-if="categoriesActive"
model="formData.categoryIds"
:existingCategoryIds="formData.categoryIds"
/>
<div>{{ formData }}</div>
<ds-space margin-top="large">
<ds-button @click.prevent="reset()">Reset form</ds-button>
<ds-button
type="submit"
@click.prevent="submit()"
icon="save"
:disabled="disabled"
primary
>
{{ update ? $t('group.update') : $t('group.save') }}
</ds-button>
</ds-space>
</ds-form>
<ds-space centered>
<nuxt-link to="/group/my-groups">zurück</nuxt-link>
<div>
<ds-container>
<ds-form
class="group-form"
ref="groupForm"
v-model="formData"
:schema="formSchema"
@submit="submit"
>
<ds-input
v-model="formData.name"
label="Gruppenname"
placeholder="Your name ..."
></ds-input>
<ds-select
icon="user"
v-model="formData.groupType"
label="Sichtbarkeit"
:options="['public', 'close', 'hidden']"
placeholder="Status ..."
></ds-select>
<ds-input v-model="formData.about" label="Kurzbeschreibung" rows="3"></ds-input>
<ds-input
v-model="formData.description"
label="Beschreibung"
type="textarea"
rows="3"
></ds-input>
<ds-select
icon="card"
v-model="formData.actionRadius"
label="Radius"
:options="['local', 'regional', 'global']"
placeholder="Radius ..."
></ds-select>
<categories-select
v-if="categoriesActive"
model="formData.categoryIds"
:existingCategoryIds="formData.categoryIds"
/>
<div>{{ formData }}</div>
<ds-space margin-top="large">
<ds-button @click.prevent="reset()">Reset form</ds-button>
<ds-button
type="submit"
@click.prevent="submit()"
icon="save"
:disabled="disabled"
primary
>
{{ update ? $t('group.update') : $t('group.save') }}
</ds-button>
</ds-space>
</ds-container>
</div>
</template>
<script>
import CategoriesSelect from '~/components/CategoriesSelect/CategoriesSelect'
export default {
name: 'GroupForm',
components: {
CategoriesSelect,
</ds-form>
<ds-space centered>
<nuxt-link to="/group/my-groups">zurück</nuxt-link>
</ds-space>
</ds-container>
</div>
</template>
<script>
import CategoriesSelect from '~/components/CategoriesSelect/CategoriesSelect'
export default {
name: 'GroupForm',
components: {
CategoriesSelect,
},
props: {
update: {
type: Boolean,
required: false,
default: false,
},
props: {
update: {
type: Boolean,
required: false,
default: false,
},
group: {
type: Object,
required: false,
default: () => ({}),
},
group: {
type: Object,
required: false,
default: () => ({}),
},
data() {
const { name, groupType, about, description, actionRadius, categories } = this.group
return {
categoriesActive: this.$env.CATEGORIES_ACTIVE,
disabled: false,
formData: {
name: name || '',
groupType: groupType || '',
about: about || '',
description: description || '',
actionRadius: actionRadius || '',
categoryIds: categories ? categories.map((category) => category.id) : [],
},
formSchema: {
name: { required: true, min: 3, max: 100 },
groupType: { required: true },
about: { required: true },
description: { required: true },
actionRadius: { required: true },
categoryIds: {
type: 'array',
required: this.categoriesActive,
validator: (_, value = []) => {
if (this.categoriesActive && (value.length === 0 || value.length > 3)) {
return [new Error(this.$t('common.validations.categories'))]
}
return []
},
},
data() {
const { name, groupType, about, description, actionRadius, categories } = this.group
return {
categoriesActive: this.$env.CATEGORIES_ACTIVE,
disabled: false,
formData: {
name: name || '',
groupType: groupType || '',
about: about || '',
description: description || '',
actionRadius: actionRadius || '',
categoryIds: categories ? categories.map((category) => category.id) : [],
},
formSchema: {
name: { required: true, min: 3, max: 100 },
groupType: { required: true },
about: { required: true },
description: { required: true },
actionRadius: { required: true },
categoryIds: {
type: 'array',
required: this.categoriesActive,
validator: (_, value = []) => {
if (this.categoriesActive && (value.length === 0 || value.length > 3)) {
return [new Error(this.$t('common.validations.categories'))]
}
return []
},
},
}
},
methods: {
submit() {
const { name, about, description, groupType, actionRadius, categoryIds } = this.formData
this.update
? this.$emit('updateGroup', {
name,
about,
description,
actionRadius,
categoryIds,
id: this.group.id,
})
: this.$emit('createGroup', {
name,
about,
description,
groupType,
actionRadius,
categoryIds,
})
},
reset() {
alert('reset')
},
}
},
methods: {
submit() {
const { name, about, description, groupType, actionRadius, categoryIds } = this.formData
this.update
? this.$emit('updateGroup', {
name,
about,
description,
actionRadius,
categoryIds,
id: this.group.id,
})
: this.$emit('createGroup', {
name,
about,
description,
groupType,
actionRadius,
categoryIds,
})
},
}
</script>
reset() {
alert('reset')
},
},
}
</script>

View File

@ -1,57 +1,56 @@
<template>
<div>
<ds-space><h3>Members</h3></ds-space>
<ds-table :data="tableData" :fields="tableFields">
<template slot="avatar">
<ds-avatar online size="small" name="Hans Peter"></ds-avatar>
</template>
<template slot="loves" slot-scope="scope">
{{ scope.row.name }} loves {{ scope.row.loves }}
</template>
<template slot="edit" slot-scope="scope">
<ds-button size="small" @click="deleteRow(scope.row)">delete</ds-button>
</template>
</ds-table>
</div>
</template>
<script>
export default {
name: 'GroupMember',
data() {
return {
tableFields: ['avatar', 'name', 'type', 'loves', 'edit'],
tableData: [
{
name: 'Rengar',
type: 'Jungler',
loves: 'Hide and seek',
},
{
name: 'Renekton',
type: 'Toplaner',
loves: 'Slice and dice',
},
{
name: 'Twitch',
type: 'ADC',
loves: 'Spray and pray',
},
{
name: 'Blitz',
type: 'Support',
loves: 'Hook you up',
},
],
<div>
<ds-space><h3>Members</h3></ds-space>
<ds-table :data="tableData" :fields="tableFields">
<template slot="avatar">
<ds-avatar online size="small" name="Hans Peter"></ds-avatar>
</template>
<template slot="loves" slot-scope="scope">
{{ scope.row.name }} loves {{ scope.row.loves }}
</template>
<template slot="edit" slot-scope="scope">
<ds-button size="small" @click="deleteRow(scope.row)">delete</ds-button>
</template>
</ds-table>
</div>
</template>
<script>
export default {
name: 'GroupMember',
data() {
return {
tableFields: ['avatar', 'name', 'type', 'loves', 'edit'],
tableData: [
{
name: 'Rengar',
type: 'Jungler',
loves: 'Hide and seek',
},
{
name: 'Renekton',
type: 'Toplaner',
loves: 'Slice and dice',
},
{
name: 'Twitch',
type: 'ADC',
loves: 'Spray and pray',
},
{
name: 'Blitz',
type: 'Support',
loves: 'Hook you up',
},
],
}
},
methods: {
deleteRow(row) {
const index = this.tableData.indexOf(row)
if (index > -1) {
this.tableData.splice(index, 1)
}
},
methods: {
deleteRow(row) {
const index = this.tableData.indexOf(row)
if (index > -1) {
this.tableData.splice(index, 1)
}
},
},
}
</script>
},
}
</script>