@christianriedl/media 1.0.174 → 1.0.175
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/BookLine.vue +12 -4
- package/src/views/BooksPage.vue +33 -15
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { ref } from 'vue';
|
|
3
3
|
import { IBook } from '@christianriedl/media';
|
|
4
4
|
|
|
5
|
-
const props = defineProps<{ book: IBook, add?: boolean, allbooks?: IBook[] }>();
|
|
5
|
+
const props = defineProps<{ book: IBook, add?: boolean, readonly?: boolean, ismobile?: boolean, allbooks?: IBook[] }>();
|
|
6
6
|
const book = props.book;
|
|
7
7
|
const emits = defineEmits<{
|
|
8
8
|
(e: 'selectbook', id: number, func: () => void): void,
|
|
@@ -52,7 +52,15 @@
|
|
|
52
52
|
</script>
|
|
53
53
|
|
|
54
54
|
<template>
|
|
55
|
-
<v-row dense align="center" :class="cls" @click="onSelect" >
|
|
55
|
+
<v-row v-if="props.ismobile" dense align="center" :class="cls" @click="onSelect" >
|
|
56
|
+
<v-col cols="9" >
|
|
57
|
+
<v-text-field v-model="book.title" hide-details density="compact" ></v-text-field>
|
|
58
|
+
</v-col>
|
|
59
|
+
<v-col cols="3" >
|
|
60
|
+
<v-text-field v-model="book.year" hide-details density="compact" ></v-text-field>
|
|
61
|
+
</v-col>
|
|
62
|
+
</v-row>
|
|
63
|
+
<v-row v-else dense align="center" :class="cls" @click="onSelect" >
|
|
56
64
|
<v-col v-if="props.add" cols="6" >
|
|
57
65
|
<v-combobox v-model="selected" :items="props.allbooks" item-value="id" item-title="title" hide-details density="compact" single-line @update:modelValue="titleChanged"></v-combobox>
|
|
58
66
|
</v-col>
|
|
@@ -66,8 +74,8 @@
|
|
|
66
74
|
<v-rating hover clearable :length="5" :size="32" :model-value="book.rating" active-color="primary" @update:modelValue="ratingChanged" />
|
|
67
75
|
</v-col>
|
|
68
76
|
<v-col cols="2">
|
|
69
|
-
<v-btn v-if="showDelete" icon="$delete" @click="onDelete"></v-btn>
|
|
70
|
-
<v-btn v-if="showSave" icon="$save" @click="onSave"></v-btn>
|
|
77
|
+
<v-btn v-if="showDelete" icon="$delete" :disabled="props.readonly" @click="onDelete"></v-btn>
|
|
78
|
+
<v-btn v-if="showSave" icon="$save" :disabled="props.readonly" @click="onSave"></v-btn>
|
|
71
79
|
</v-col>
|
|
72
80
|
</v-row>
|
|
73
81
|
</template>
|
package/src/views/BooksPage.vue
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { inject, ref, reactive, onMounted, onUnmounted, computed, StyleValue } from 'vue';
|
|
3
|
-
import { IAppState, appStateSymbol, getOpenAISymbol, IOpenAIService, ICompleteData } from '@christianriedl/utils';
|
|
3
|
+
import { IAppState, appStateSymbol, getOpenAISymbol, IOpenAIService, ICompleteData, EScope, EDevice } from '@christianriedl/utils';
|
|
4
4
|
import { BooksService, getBooksSymbol, IAuthorShort, IAuthor, IBook } from '@christianriedl/media';
|
|
5
5
|
import BookLine from '../components/BookLine.vue';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const appState = inject(appStateSymbol)!;
|
|
8
8
|
const getBooksService = inject(getBooksSymbol)!;
|
|
9
9
|
const booksService = getBooksService() as BooksService;
|
|
10
10
|
const getOpenAI = inject(getOpenAISymbol)!;
|
|
@@ -21,8 +21,10 @@
|
|
|
21
21
|
const showAddBookLine = ref(false);
|
|
22
22
|
const showCurrentBook = ref(false);
|
|
23
23
|
let setBookChanged: () => void;
|
|
24
|
-
|
|
24
|
+
let readonly = !(appState.scopes & EScope.Admin);
|
|
25
|
+
let isMobile = appState.isMobile && (appState.device != EDevice.iPad);
|
|
25
26
|
const heightStyle = computed<StyleValue>(() => { return { height: appState.bodyHeight.value + "px", overflowY: "auto" } });
|
|
27
|
+
|
|
26
28
|
start();
|
|
27
29
|
|
|
28
30
|
async function start() {
|
|
@@ -324,14 +326,26 @@
|
|
|
324
326
|
<template>
|
|
325
327
|
<v-container fluid class="bg-office" :style="heightStyle">
|
|
326
328
|
<v-defaults-provider :defaults="{'VBtn':{'size':'large','variant':'flat','class':'bg-office'}}">
|
|
327
|
-
<v-row dense align="center">
|
|
329
|
+
<v-row v-if="isMobile" dense align="center">
|
|
330
|
+
<v-col cols="6">Name</v-col>
|
|
331
|
+
<v-col cols="6">Vorname</v-col>
|
|
332
|
+
</v-row>
|
|
333
|
+
<v-row v-else dense align="center">
|
|
328
334
|
<v-col cols="2">Name</v-col>
|
|
329
335
|
<v-col cols="2">Vorname</v-col>
|
|
330
336
|
<v-col cols="2">Von</v-col>
|
|
331
337
|
<v-col cols="2">Bis</v-col>
|
|
332
338
|
<v-col cols="2">Land</v-col>
|
|
333
339
|
</v-row>
|
|
334
|
-
<v-row dense align="center">
|
|
340
|
+
<v-row v-if="isMobile" dense align="center">
|
|
341
|
+
<v-col cols="6">
|
|
342
|
+
<v-combobox v-model="selected" :items="authors" item-value="id" item-title="sN" hide-details density="compact" single-line @update:modelValue="authorNameChanged"></v-combobox>
|
|
343
|
+
</v-col>
|
|
344
|
+
<v-col cols="6">
|
|
345
|
+
<v-text-field v-model="author.givenName" hide-details density="compact" @update:modelValue="fieldChanged" @update:focused="givenNameFocused"></v-text-field>
|
|
346
|
+
</v-col>
|
|
347
|
+
</v-row>
|
|
348
|
+
<v-row v-else dense align="center">
|
|
335
349
|
<v-col cols="2">
|
|
336
350
|
<v-combobox v-model="selected" :items="authors" item-value="id" item-title="sN" hide-details density="compact" single-line @update:modelValue="authorNameChanged"></v-combobox>
|
|
337
351
|
</v-col>
|
|
@@ -348,23 +362,27 @@
|
|
|
348
362
|
<v-text-field v-model="author.country" hide-details density="compact" @update:modelValue="fieldChanged"></v-text-field>
|
|
349
363
|
</v-col>
|
|
350
364
|
<v-col cols="2">
|
|
351
|
-
<v-btn v-if="mustAddAuthor" @click="addAuthor" append-icon="$plus">AUTHOR</v-btn>
|
|
352
|
-
<v-btn v-if="mustUpdateAuthor" @click="updateAuthor" icon="$save"></v-btn>
|
|
353
|
-
<v-btn v-if="author.id > 0" @click="deleteAuthor" icon="$delete"></v-btn>
|
|
365
|
+
<v-btn v-if="mustAddAuthor" @click="addAuthor" :disabled="readonly" append-icon="$plus">AUTHOR</v-btn>
|
|
366
|
+
<v-btn v-if="mustUpdateAuthor" @click="updateAuthor" :disabled="readonly" icon="$save"></v-btn>
|
|
367
|
+
<v-btn v-if="author.id > 0" @click="deleteAuthor" :disabled="readonly" icon="$delete"></v-btn>
|
|
354
368
|
</v-col>
|
|
355
369
|
</v-row>
|
|
356
370
|
<v-divider></v-divider>
|
|
357
|
-
<v-row dense align="center">
|
|
358
|
-
<v-col cols="
|
|
371
|
+
<v-row v-if="isMobile" dense align="center">
|
|
372
|
+
<v-col cols="7">TITEL</v-col>
|
|
359
373
|
<v-col cols="2">JAHR</v-col>
|
|
360
|
-
<v-col cols="
|
|
374
|
+
<v-col cols="3">RATING</v-col>
|
|
375
|
+
</v-row>
|
|
376
|
+
<v-row v-else dense align="center">
|
|
377
|
+
<v-col cols="9">TITEL</v-col>
|
|
378
|
+
<v-col cols="3">JAHR</v-col>
|
|
361
379
|
<v-col v-if="author.id" cols="2">
|
|
362
|
-
<v-btn v-if="!showAddBookLine" @click="addNewBook" append-icon="$plus">BOOK</v-btn>
|
|
363
|
-
<v-btn v-if="showAddBookLine" @click="cancelAddNewBook" icon="$cancel"></v-btn>
|
|
380
|
+
<v-btn v-if="!showAddBookLine" @click="addNewBook" :disabled="readonly" append-icon="$plus">BOOK</v-btn>
|
|
381
|
+
<v-btn v-if="showAddBookLine" @click="cancelAddNewBook" :disabled="readonly" icon="$cancel"></v-btn>
|
|
364
382
|
</v-col>
|
|
365
383
|
</v-row>
|
|
366
|
-
<book-line v-if="showAddBookLine" :book="newBook" :add="true" :allbooks="allBooks" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
|
|
367
|
-
<book-line v-for="book in author.books" :key="book.id" :book="book" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
|
|
384
|
+
<book-line v-if="showAddBookLine" :book="newBook" :add="true" :allbooks="allBooks" :readonly="readonly" :ismobile="isMobile" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
|
|
385
|
+
<book-line v-for="book in author.books" :key="book.id" :book="book" :readonly="readonly" :ismobile="isMobile" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
|
|
368
386
|
<v-textarea v-if="showCurrentBook" class="pt-2"clearable auto-grow variant="outlined" label="Beschreibung" v-model="currentBook.description" @update:modelValue="descriptionChanged">
|
|
369
387
|
</v-textarea>
|
|
370
388
|
<v-textarea v-if="showCurrentBook" clearable auto-grow variant="outlined" label="Kommentar" v-model="currentBook.comment" @update:modelValue="descriptionChanged">
|