Skip to content

Commit

Permalink
Merge pull request #3841 from manuelmeister/improve/admin
Browse files Browse the repository at this point in the history
Organize admin views
  • Loading branch information
manuelmeister committed Oct 1, 2023
2 parents 255d9dd + 47b5a1f commit 1e1944a
Show file tree
Hide file tree
Showing 25 changed files with 788 additions and 395 deletions.
1 change: 1 addition & 0 deletions e2e/specs/clientPrint.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ describe('Client print test', () => {

cy.visit('/camps')
cy.get('a:contains("GRGR")').click()
cy.get('a:contains("Admin")').click()
cy.get('a:contains("Drucken")').click()
cy.get('button:contains("PDF herunterladen (Layout #2)")').click()

Expand Down
1 change: 1 addition & 0 deletions e2e/specs/nuxtPrint.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ describe('Nuxt print test', () => {

cy.visit('/camps')
cy.get('a:contains("GRGR")').click()
cy.get('a:contains("Admin")').click()
cy.get('a:contains("Drucken")').click()
cy.get('button:contains("PDF herunterladen (Layout #1)")').click()

Expand Down
155 changes: 70 additions & 85 deletions frontend/src/components/campAdmin/CampConditionalFields.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,81 +3,85 @@ Displays fields which don't apply to all camps, but are required for some
-->

<template>
<v-expansion-panels v-model="openPanels" class="mb-8 mt-2" multiple>
<v-expansion-panel>
<v-expansion-panel-header>
<div class="subtitle-1 conditional-group-title">
{{ $tc('components.campAdmin.campConditionalFields.ysCamp.title') }}
</div>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-skeleton-loader v-if="camp()._meta.loading" type="article" />
<div v-else class="mt-3">
<api-form :entity="camp()">
<api-text-field
fieldname="organizer"
:name="$tc('entity.camp.fields.organizer')"
:disabled="disabled"
/>
<api-text-field
fieldname="kind"
:name="$tc('entity.camp.fields.kind')"
:disabled="disabled"
/>
<api-text-field
fieldname="coachName"
:name="$tc('entity.camp.fields.coachName')"
:disabled="disabled"
/>
</api-form>
</div>
</v-expansion-panel-content>
</v-expansion-panel>
<v-expansion-panel>
<v-expansion-panel-header>
<div class="subtitle-1 conditional-group-title">
{{ $tc('components.campAdmin.campConditionalFields.course.title') }}
</div>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-skeleton-loader v-if="camp()._meta.loading" type="article" />
<div v-else class="mt-3">
<api-form :entity="camp()">
<api-text-field
fieldname="courseNumber"
:name="$tc('entity.camp.fields.courseNumber')"
:disabled="disabled"
/>
<api-text-field
fieldname="courseKind"
:name="$tc('entity.camp.fields.courseKind')"
:disabled="disabled"
/>
<api-text-field
fieldname="trainingAdvisorName"
:name="$tc('entity.camp.fields.trainingAdvisorName')"
:disabled="disabled"
/>
<api-checkbox
fieldname="printYSLogoOnPicasso"
:name="$tc('entity.camp.fields.printYSLogoOnPicasso')"
:disabled="disabled"
/>
</api-form>
</div>
</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
<v-expansion-panel>
<v-expansion-panel-header>
<h2 class="subtitle-1 font-weight-bold">
{{ $tc('components.campAdmin.campConditionalFields.title') }}
</h2>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-row class="pb-6">
<v-col cols="12" md="6" class="pb-0">
<content-group
:title="$tc('components.campAdmin.campConditionalFields.ysCamp.title')"
>
<v-skeleton-loader v-if="camp()._meta.loading" type="article" />
<div v-else class="mt-3">
<api-form :entity="camp()">
<api-text-field
fieldname="organizer"
:name="$tc('entity.camp.fields.organizer')"
:disabled="disabled"
/>
<api-text-field
fieldname="kind"
:name="$tc('entity.camp.fields.kind')"
:disabled="disabled"
/>
<api-text-field
fieldname="coachName"
:name="$tc('entity.camp.fields.coachName')"
:disabled="disabled"
/>
</api-form>
</div>
</content-group>
</v-col>
<v-col cols="12" md="6" class="pb-0">
<content-group
:title="$tc('components.campAdmin.campConditionalFields.course.title')"
>
<v-skeleton-loader v-if="camp()._meta.loading" type="article" />
<div v-else class="mt-3">
<api-form :entity="camp()">
<api-text-field
fieldname="courseNumber"
:name="$tc('entity.camp.fields.courseNumber')"
:disabled="disabled"
/>
<api-text-field
fieldname="courseKind"
:name="$tc('entity.camp.fields.courseKind')"
:disabled="disabled"
/>
<api-text-field
fieldname="trainingAdvisorName"
:name="$tc('entity.camp.fields.trainingAdvisorName')"
:disabled="disabled"
/>
<api-checkbox
fieldname="printYSLogoOnPicasso"
:name="$tc('entity.camp.fields.printYSLogoOnPicasso')"
:disabled="disabled"
/>
</api-form>
</div>
</content-group>
</v-col>
</v-row>
</v-expansion-panel-content>
</v-expansion-panel>
</template>

<script>
import ApiTextField from '@/components/form/api/ApiTextField.vue'
import ApiForm from '@/components/form/api/ApiForm.vue'
import ApiCheckbox from '../form/api/ApiCheckbox.vue'
import ContentGroup from '@/components/layout/ContentGroup.vue'
export default {
name: 'CampConditionalFields',
components: { ApiTextField, ApiCheckbox, ApiForm },
components: { ContentGroup, ApiTextField, ApiCheckbox, ApiForm },
props: {
camp: {
type: Function,
Expand All @@ -88,24 +92,5 @@ export default {
default: false,
},
},
data: () => ({
openPanels: [],
}),
mounted() {
this.camp()._meta.load.then((camp) => {
if (camp.organizer || camp.kind || camp.coachName) {
this.openPanels.push(0)
}
if (camp.courseNumber || camp.courseKind || camp.trainingAdvisorName) {
this.openPanels.push(1)
}
})
},
}
</script>

<style scoped>
.conditional-group-title {
font-size: 1rem !important;
}
</style>
120 changes: 65 additions & 55 deletions frontend/src/components/campAdmin/CampDangerZone.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,70 +3,80 @@ Critical operations on camp
-->

<template>
<content-group :title="$tc('components.campAdmin.campDangerZone.title')">
<v-skeleton-loader v-if="camp()._meta.loading" type="article" />
<div v-else>
<v-list>
<v-list-item class="px-0" three-line>
<v-list-item-content>
<v-list-item-title>
{{ $tc('components.campAdmin.campDangerZone.deleteCamp.title') }}
</v-list-item-title>
<v-list-item-subtitle>
{{ $tc('components.campAdmin.campDangerZone.deleteCamp.description') }}
</v-list-item-subtitle>
</v-list-item-content>
<v-list-item-action>
<dialog-entity-delete
:entity="camp()"
:submit-enabled="promptText === camp().name"
icon="mdi-bomb"
@submit="$router.push({ name: 'camps' })"
>
<template #activator="{ on }">
<button-delete
icon="mdi-bomb"
:text="false"
dark
outlined
color="blue-grey"
@click.prevent="on.click"
>
{{ $tc('global.button.delete') }}
</button-delete>
</template>
<p class="body-1">
{{
$tc('components.campAdmin.campDangerZone.deleteCamp.explanation', 0, {
campName: camp().name,
})
}}
</p>
<label>
{{
$tc('components.campAdmin.campDangerZone.deleteCamp.label', 0, {
campName: camp().name,
})
}}
<e-text-field v-model="promptText" />
</label>
</dialog-entity-delete>
</v-list-item-action>
</v-list-item>
</v-list>
</div>
</content-group>
<v-expansion-panel active-class="red lighten-5 red--text text--darken-4">
<v-expansion-panel-header>
<h2 class="subtitle-1 font-weight-bold">
{{ $tc('components.campAdmin.campDangerZone.title') }}
</h2>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-skeleton-loader v-if="camp()._meta.loading" type="article" />
<div v-else>
<v-list class="py-0" color="transparent">
<v-list-item class="px-0">
<v-list-item-content>
<v-list-item-title>
{{ $tc('components.campAdmin.campDangerZone.deleteCamp.title') }}
</v-list-item-title>
<div class="body-2 grey--text text--darken-3">
{{ $tc('components.campAdmin.campDangerZone.deleteCamp.description') }}
</div>
</v-list-item-content>
<v-list-item-action>
<dialog-entity-delete
:entity="camp()"
:submit-enabled="promptText === camp().name"
icon="mdi-bomb"
@submit="$router.push({ name: 'camps' })"
>
<template #activator="{ on }">
<button-delete
icon="mdi-bomb"
:text="false"
dark
outlined
color="blue-grey"
@click.prevent="on.click"
>
{{ $tc('global.button.delete') }}
</button-delete>
</template>
<p class="body-1">
{{
$tc('components.campAdmin.campDangerZone.deleteCamp.explanation', 0, {
campName: camp().name,
})
}}
</p>
<label>
{{
$tc('components.campAdmin.campDangerZone.deleteCamp.label', 0, {
campName: camp().name,
})
}}
<e-text-field v-model="promptText" />
</label>
</dialog-entity-delete>
</v-list-item-action>
</v-list-item>
</v-list>
</div>
</v-expansion-panel-content>
</v-expansion-panel>
</template>

<script>
import ContentGroup from '@/components/layout/ContentGroup.vue'
import ButtonDelete from '@/components/buttons/ButtonDelete.vue'
import DialogEntityDelete from '@/components/dialog/DialogEntityDelete.vue'
import ETextField from '@/components/form/base/ETextField.vue'
export default {
name: 'CampDangerZone',
components: { ETextField, DialogEntityDelete, ButtonDelete, ContentGroup },
components: {
ETextField,
DialogEntityDelete,
ButtonDelete,
},
props: {
camp: {
type: Function,
Expand Down
13 changes: 11 additions & 2 deletions frontend/src/components/campAdmin/DialogMaterialListEdit.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,22 @@
:loading="loading"
:error="error"
icon="mdi-package-variant"
:title="materialList.name"
:title="$tc('components.campAdmin.dialogMaterialListEdit.title')"
:submit-action="update"
submit-color="success"
:cancel-action="close"
>
<template #activator="scope">
<slot name="activator" v-bind="scope" />
</template>
<template #moreActions>
<PromptEntityDelete
:entity="entityUri"
:warning-text-entity="materialList.name"
position="top"
align="left"
/>
</template>
<dialog-material-list-form :material-list="entityData" />
</dialog-form>
</template>
Expand All @@ -20,10 +28,11 @@
import DialogBase from '@/components/dialog/DialogBase.vue'
import DialogForm from '@/components/dialog/DialogForm.vue'
import DialogMaterialListForm from './DialogMaterialListForm.vue'
import PromptEntityDelete from '@/components/prompt/PromptEntityDelete.vue'
export default {
name: 'DialogMaterialListEdit',
components: { DialogForm, DialogMaterialListForm },
components: { PromptEntityDelete, DialogForm, DialogMaterialListForm },
extends: DialogBase,
props: {
materialList: { type: Object, required: true },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
<!--
Displays several tabs with details on a single camp.
-->

<template>
<v-container fluid :style="layoutStyle">
<router-view v-bind="$attrs" />
Expand All @@ -10,7 +6,7 @@ Displays several tabs with details on a single camp.

<script>
export default {
name: 'Camp',
name: 'GenericPage',
props: {
layout: { type: String, required: false, default: 'full' },
},
Expand Down
Loading

0 comments on commit 1e1944a

Please sign in to comment.