Newer
Older
<div
class="d-flex flex-column flex-md-row align-stretch align-md-center gap justify-start"
<v-text-field
class="flex-grow-1 min-width"
dense
hide-details
filled
:label="$t('alsijil.coursebook.summary.topic')"
:value="documentation.topic"
@input="topic = $event"
@focusout="save"
@keydown.enter="saveAndBlur"
:loading="loading"
/>
<div class="d-flex flex-column align-start">
<v-chip
v-bind="dialogActivator.attrs"
v-on="dialogActivator.on"
:outlined="!documentation.homework"
@click="$emit('open')"
class="mb-2 chip-width"
>
<span class="max-width text-truncate">{{
documentation.homework
? $t("alsijil.coursebook.summary.homework.value", documentation)
: $t("alsijil.coursebook.summary.homework.empty")
}}</span>
v-bind="dialogActivator.attrs"
v-on="dialogActivator.on"
:outlined="!documentation.groupNote"
@click="$emit('open')"
class="chip-width"
>
<span class="max-width text-truncate">{{
documentation.groupNote
? $t("alsijil.coursebook.summary.group_note.value", {
groupNote: truncate(documentation.groupNote),
})
: $t("alsijil.coursebook.summary.group_note.empty")
}}</span>
<!-- not compact -->
<!-- Are focusout & enter enough trigger? -->
<v-text-field
filled
v-if="!compact"
/>
<v-textarea
filled
auto-grow
v-if="!compact"
/>
<v-textarea
filled
auto-grow
v-if="!compact"
import createOrPatchMixin from "aleksis.core/mixins/createOrPatchMixin.js";
import documentationPartMixin from "./documentationPartMixin";
mixins: [createOrPatchMixin, documentationPartMixin],
data() {
return {
topic: "",
};
},
methods: {
handleUpdateAfterCreateOrPatch(itemId, wasCreate) {
return (cached, incoming) => {
const index = cached.findIndex(
(o) => o[itemId] === this.documentation.id,
);
save() {
if (this.topic || this.homework || this.groupNote) {
const topic = this.topic ? { topic: this.topic } : {};
const homework = this.homework ? { homework: this.homework } : {};
const groupNote = this.groupNote ? { groupNote: this.groupNote } : {};
this.createOrPatch([
{
id: this.documentation.id,
...topic,
...homework,
...groupNote,
},
]);
this.homework = "";
this.groupNote = "";
saveAndBlur(event) {
this.save();
event.target.blur();
computed: {
homeworkIcon() {
if (this.documentation.homework) {
return this.documentation.canEdit
? "mdi-book-edit-outline"
: "mdi-book-alert-outline";
return this.documentation.canEdit
? "mdi-book-plus-outline"
: "mdi-book-off-outline";
},
groupNoteIcon() {
if (this.documentation.groupNote) {
return this.documentation.canEdit
? "mdi-note-edit-outline"
: "mdi-note-alert-outline";
return this.documentation.canEdit
? "mdi-note-plus-outline"
: "mdi-note-off-outline";
<style scoped>
.min-width {
min-width: 25ch;
}
.max-width {