@christianriedl/media 1.0.181 → 1.0.182
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/dist/booksService.d.ts +4 -1
- package/dist/booksService.js +8 -0
- package/dist/booksService.js.map +1 -1
- package/dist/iBooks.d.ts +13 -0
- package/package.json +1 -1
- package/src/components/BookLine.vue +7 -4
- package/src/components/BookSearchLine.vue +24 -0
- package/src/views/BooksPage.vue +6 -7
- package/src/views/BooksSearchPage.vue +78 -0
package/dist/booksService.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRest } from '@christianriedl/rest';
|
|
2
2
|
import { ILogger, IStatistics, InjectionKey } from '@christianriedl/utils';
|
|
3
|
-
import { IBook, IAuthor, IAuthorShort, IBooksService } from "./iBooks";
|
|
3
|
+
import { IBook, IFullBook, IAuthor, IAuthorShort, IBooksService } from "./iBooks";
|
|
4
4
|
export declare const getBooksSymbol: InjectionKey<() => BooksService>;
|
|
5
5
|
export declare class BooksService implements IBooksService {
|
|
6
6
|
rest: IRest;
|
|
@@ -8,6 +8,8 @@ export declare class BooksService implements IBooksService {
|
|
|
8
8
|
user: string;
|
|
9
9
|
log: ILogger;
|
|
10
10
|
cachedAuthors?: IAuthorShort[];
|
|
11
|
+
categories: string[];
|
|
12
|
+
flags: string[];
|
|
11
13
|
constructor(rest: IRest, user: string, statistics: IStatistics, log: ILogger);
|
|
12
14
|
getAuthors(surName?: string, givenName?: string, withBooks?: boolean, id?: number): Promise<IAuthor[]>;
|
|
13
15
|
getAuthorsShort(): Promise<IAuthorShort[]>;
|
|
@@ -15,6 +17,7 @@ export declare class BooksService implements IBooksService {
|
|
|
15
17
|
updateAuthor(author: IAuthor): Promise<boolean>;
|
|
16
18
|
deleteAuthor(id: number): Promise<boolean>;
|
|
17
19
|
getBooks(authorId?: number, bookId?: number): Promise<IBook[]>;
|
|
20
|
+
getFullBooks(surName?: string, givenName?: string, title?: string, flags?: string, minRating?: number): Promise<IFullBook[]>;
|
|
18
21
|
addBook(book: IBook): Promise<number>;
|
|
19
22
|
updateBook(book: IBook): Promise<boolean>;
|
|
20
23
|
deleteBook(id: number): Promise<boolean>;
|
package/dist/booksService.js
CHANGED
|
@@ -5,11 +5,15 @@ export class BooksService {
|
|
|
5
5
|
user;
|
|
6
6
|
log;
|
|
7
7
|
cachedAuthors;
|
|
8
|
+
categories;
|
|
9
|
+
flags;
|
|
8
10
|
constructor(rest, user, statistics, log) {
|
|
9
11
|
this.log = log;
|
|
10
12
|
this.rest = rest;
|
|
11
13
|
this.user = user;
|
|
12
14
|
this.mediaUrl = rest.serviceUrl;
|
|
15
|
+
this.categories = ["Literatur", "Geschichte", "Philosophie", "Naturwissenschaft"];
|
|
16
|
+
this.flags = ["liesCH", "liesCH", "ausgeborgt"];
|
|
13
17
|
}
|
|
14
18
|
async getAuthors(surName, givenName, withBooks, id) {
|
|
15
19
|
const info = await this.rest.getData('apibooks/authors', { surName, givenName, withBooks, id });
|
|
@@ -49,6 +53,10 @@ export class BooksService {
|
|
|
49
53
|
const info = await this.rest.getData('apibooks/books', { authorId, bookId });
|
|
50
54
|
return info.result;
|
|
51
55
|
}
|
|
56
|
+
async getFullBooks(surName, givenName, title, flags, minRating) {
|
|
57
|
+
const info = await this.rest.getData('apibooks/books/full', { surName, givenName, title, flags, minRating });
|
|
58
|
+
return info.result;
|
|
59
|
+
}
|
|
52
60
|
async addBook(book) {
|
|
53
61
|
const url = `apibooks/books`;
|
|
54
62
|
const res = await this.rest.postDataEx(url, book);
|
package/dist/booksService.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"booksService.js","sourceRoot":"","sources":["../src/booksService.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAAqC,MAAM,CAAC,WAAW,CAAC,CAAC;AACpF,MAAM,OAAO,YAAY;IACrB,IAAI,CAAQ;IACZ,QAAQ,CAAS;IACjB,IAAI,CAAS;IACb,GAAG,CAAU;IACb,aAAa,CAAkB;IAC/B,YAAY,IAAW,EAAE,IAAY,EAAE,UAAuB,EAAE,GAAY;QACxE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"booksService.js","sourceRoot":"","sources":["../src/booksService.ts"],"names":[],"mappings":"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"}
|
package/dist/iBooks.d.ts
CHANGED
|
@@ -21,8 +21,20 @@ export interface IBook {
|
|
|
21
21
|
year?: number;
|
|
22
22
|
comment?: string;
|
|
23
23
|
rating?: number;
|
|
24
|
+
flags?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface IFullBook {
|
|
27
|
+
authorId: number;
|
|
28
|
+
surName: string;
|
|
29
|
+
givenName: string;
|
|
30
|
+
bookId: number;
|
|
31
|
+
title: string;
|
|
32
|
+
rating?: number;
|
|
33
|
+
flags?: string;
|
|
24
34
|
}
|
|
25
35
|
export interface IBooksService {
|
|
36
|
+
categories: string[];
|
|
37
|
+
flags: string[];
|
|
26
38
|
getAuthors(surName?: string, givenName?: string, withBooks?: boolean, id?: number): Promise<IAuthor[]>;
|
|
27
39
|
getAuthorsShort(): Promise<IAuthorShort[]>;
|
|
28
40
|
addAuthor(author: IAuthor): Promise<number>;
|
|
@@ -32,4 +44,5 @@ export interface IBooksService {
|
|
|
32
44
|
addBook(book: IBook): Promise<number>;
|
|
33
45
|
updateBook(book: IBook): Promise<boolean>;
|
|
34
46
|
deleteBook(id: number): Promise<boolean>;
|
|
47
|
+
getFullBooks(surName?: string, givenName?: string, title?: string, flags?: string, minRating?: number): Promise<IFullBook[]>;
|
|
35
48
|
}
|
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, readonly?: boolean, ismobile?: boolean, allbooks?: IBook[] }>();
|
|
5
|
+
const props = defineProps<{ book: IBook, flags: string[], 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,
|
|
@@ -63,15 +63,18 @@
|
|
|
63
63
|
<v-col v-else cols="6" >
|
|
64
64
|
<v-text-field v-model="book.title" hide-details density="compact" @update:modelValue="fieldChanged"></v-text-field>
|
|
65
65
|
</v-col>
|
|
66
|
-
<v-col cols="
|
|
66
|
+
<v-col cols="1" >
|
|
67
67
|
<v-text-field v-model="book.year" hide-details density="compact" type="number" @update:modelValue="fieldChanged"></v-text-field>
|
|
68
68
|
</v-col>
|
|
69
|
-
<v-col cols="
|
|
69
|
+
<v-col cols="1" >
|
|
70
70
|
<v-rating hover clearable :length="5" :size="32" v-model="book.rating" active-color="primary" @update:modelValue="fieldChanged" />
|
|
71
71
|
</v-col>
|
|
72
72
|
<v-col cols="2">
|
|
73
|
-
|
|
73
|
+
<v-select v-model="book.flags" :items="props.flags" multiple hide-details density="compact" single-line @update:modelValue="fieldChanged"></v-select>
|
|
74
|
+
</v-col>
|
|
75
|
+
<v-col cols="2">
|
|
74
76
|
<v-btn v-if="showSave" icon="$save" :disabled="props.readonly" @click="onSave"></v-btn>
|
|
77
|
+
<v-btn v-if="showDelete" icon="$delete" :disabled="props.readonly" @click="onDelete"></v-btn>
|
|
75
78
|
</v-col>
|
|
76
79
|
</v-row>
|
|
77
80
|
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { IFullBook } from '@christianriedl/media';
|
|
3
|
+
const props = defineProps<{ book: IFullBook, ismobile?: boolean }>();
|
|
4
|
+
const book = props.book;
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<v-row v-if="props.ismobile" dense align="center" class="bg-office">
|
|
9
|
+
<v-col cols="12" >
|
|
10
|
+
<p class="font-weight-bold">{{book.givenName + ' ' + book.surName}}</p>
|
|
11
|
+
</v-col>
|
|
12
|
+
<v-col cols="12" >
|
|
13
|
+
<p class="font-weight-medium">{{book.title}}</p>
|
|
14
|
+
</v-col>
|
|
15
|
+
</v-row>
|
|
16
|
+
<v-row v-else dense align="center" :class="cls" @click="onSelect" >
|
|
17
|
+
<v-col cols="6" >
|
|
18
|
+
<p class="font-weight-bold">{{book.givenName + ' ' + book.surName}}</p>
|
|
19
|
+
</v-col>
|
|
20
|
+
<v-col cols="6" >
|
|
21
|
+
<p class="font-weight-medium">{{book.title}}</p>
|
|
22
|
+
</v-col>
|
|
23
|
+
</v-row>
|
|
24
|
+
</template>
|
package/src/views/BooksPage.vue
CHANGED
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
let readonly = !(appState.scopes & EScope.Admin);
|
|
25
25
|
let isMobile = appState.isMobile && (appState.device != EDevice.iPad);
|
|
26
26
|
const heightStyle = computed<StyleValue>(() => { return { height: appState.bodyHeight.value + "px", overflowY: "auto" } });
|
|
27
|
-
const categories = ["Literatur", "Geschichte", "Philosophie", "Naturwissenschaft"];
|
|
28
27
|
|
|
29
28
|
start();
|
|
30
29
|
|
|
@@ -375,8 +374,7 @@
|
|
|
375
374
|
<v-text-field v-model="author.yearOfDeath" hide-details density="compact" type="number" @update:modelValue="fieldChanged"></v-text-field>
|
|
376
375
|
</v-col>
|
|
377
376
|
<v-col cols="2">
|
|
378
|
-
<v-select v-model="author.category" :items="categories" hide-details density="compact" single-line @update:modelValue="fieldChanged">
|
|
379
|
-
</v-select>
|
|
377
|
+
<v-select v-model="author.category" :items="booksService.categories" hide-details density="compact" single-line @update:modelValue="fieldChanged"></v-select>
|
|
380
378
|
</v-col>
|
|
381
379
|
<v-col cols="2">
|
|
382
380
|
<v-text-field v-model="author.country" hide-details density="compact" @update:modelValue="fieldChanged"></v-text-field>
|
|
@@ -394,15 +392,16 @@
|
|
|
394
392
|
</v-row>
|
|
395
393
|
<v-row v-else dense align="center">
|
|
396
394
|
<v-col cols="6">TITEL</v-col>
|
|
397
|
-
<v-col cols="
|
|
398
|
-
<v-col cols="
|
|
395
|
+
<v-col cols="1">JAHR</v-col>
|
|
396
|
+
<v-col cols="1">RATING</v-col>
|
|
397
|
+
<v-col cols="2">STATUS</v-col>
|
|
399
398
|
<v-col v-if="author.id" cols="2">
|
|
400
399
|
<v-btn v-if="!showAddBookLine" @click="addNewBook" :disabled="readonly" prepend-icon="$plus">BOOK</v-btn>
|
|
401
400
|
<v-btn v-if="showAddBookLine" @click="cancelAddNewBook" :disabled="readonly" icon="$cancel"></v-btn>
|
|
402
401
|
</v-col>
|
|
403
402
|
</v-row>
|
|
404
|
-
<book-line v-if="showAddBookLine" :book="newBook" :add="true" :allbooks="allBooks" :readonly="readonly" :ismobile="isMobile" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
|
|
405
|
-
<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>
|
|
403
|
+
<book-line v-if="showAddBookLine" :book="newBook" :flags="bookService.flags" :add="true" :allbooks="allBooks" :readonly="readonly" :ismobile="isMobile" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
|
|
404
|
+
<book-line v-for="book in author.books" :key="book.id" :book="book" :flags="bookService.flags" :readonly="readonly" :ismobile="isMobile" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
|
|
406
405
|
<v-textarea v-if="showCurrentBook" clearable auto-grow variant="outlined" label="Beschreibung" :disabled="isMobile" class="pt-2" v-model="currentBook.description" @update:modelValue="descriptionChanged">
|
|
407
406
|
</v-textarea>
|
|
408
407
|
<v-textarea v-if="showCurrentBook" clearable auto-grow variant="outlined" label="Kommentar" :disabled="isMobile" v-model="currentBook.comment" @update:modelValue="descriptionChanged">
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { inject, ref, reactive, onMounted, onUnmounted, computed, StyleValue } from 'vue';
|
|
3
|
+
import { IAppState, appStateSymbol, getOpenAISymbol, IOpenAIService, ICompleteData, EScope, EDevice } from '@christianriedl/utils';
|
|
4
|
+
import { BooksService, getBooksSymbol, IAuthorShort, IAuthor, IBookFull } from '@christianriedl/media';
|
|
5
|
+
import BookSearchLine from '../components/BookSearchLine.vue';
|
|
6
|
+
|
|
7
|
+
const appState = inject(appStateSymbol)!;
|
|
8
|
+
const getBooksService = inject(getBooksSymbol)!;
|
|
9
|
+
const booksService = getBooksService() as BooksService;
|
|
10
|
+
const authors = reactive<IAuthorShort[]>([]);
|
|
11
|
+
const books = ref<IBookFull>([]);
|
|
12
|
+
const selected = ref<IAuthorShort | string | undefined>();
|
|
13
|
+
const title = ref("");
|
|
14
|
+
const rating = ref(0);
|
|
15
|
+
const flags = ref("");
|
|
16
|
+
let isMobile = appState.isMobile && (appState.device != EDevice.iPad);
|
|
17
|
+
const heightStyle = computed<StyleValue>(() => { return { height: appState.bodyHeight.value + "px", overflowY: "auto" } });
|
|
18
|
+
|
|
19
|
+
start();
|
|
20
|
+
|
|
21
|
+
async function start() {
|
|
22
|
+
const authorsShort = await booksService.getAuthorsShort();
|
|
23
|
+
if (authorsShort) {
|
|
24
|
+
authors.splice(0, authors.length, ...authorsShort);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function search() {
|
|
28
|
+
books.value = await getFullBooks(selected.sN, selected.gN, title.value, flags.value, rating.value): Promise<IFullBook[]>;
|
|
29
|
+
}
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<template>
|
|
33
|
+
<v-container fluid class="bg-office" :style="heightStyle">
|
|
34
|
+
<v-defaults-provider :defaults="{'VBtn':{'size':'large','variant':'flat','class':'bg-office'}}">
|
|
35
|
+
<v-row v-if="isMobile" dense align="center">
|
|
36
|
+
<v-col cols="6">
|
|
37
|
+
<v-combobox v-model="selected" :items="authors" label="Author" item-value="id" item-title="sN" hide-details density="compact" single-line ></v-combobox>
|
|
38
|
+
</v-col>
|
|
39
|
+
<v-col cols="6">
|
|
40
|
+
<p>{{selected.gN}}</p>
|
|
41
|
+
</v-col>
|
|
42
|
+
<v-col cols="6">
|
|
43
|
+
<v-text-field label="Titel" v-model="title" hide-details density="compact"></v-text-field>
|
|
44
|
+
</v-col>
|
|
45
|
+
<v-col cols="2">
|
|
46
|
+
<v-select label="Status" v-model="flags" :items="booksService.flags" hide-details density="compact" single-line ></v-select>
|
|
47
|
+
</v-col>
|
|
48
|
+
<v-col cols="2">
|
|
49
|
+
<v-rating label="Rating" hover clearable :length="5" :size="16" v-model="rating" active-color="primary" />
|
|
50
|
+
</v-col>
|
|
51
|
+
<v-col cols="2">
|
|
52
|
+
<v-btn @click=search" icon="$search"></v-btn>
|
|
53
|
+
</v-col>
|
|
54
|
+
</v-row>
|
|
55
|
+
<v-row v-else dense align="center">
|
|
56
|
+
<v-col cols="2">
|
|
57
|
+
<v-combobox v-model="selected" :items="authors" label="Author" item-value="id" item-title="sN" hide-details density="compact" single-line ></v-combobox>
|
|
58
|
+
</v-col>
|
|
59
|
+
<v-col cols="2">
|
|
60
|
+
<p>{{selected.gN}}</p>
|
|
61
|
+
</v-col>
|
|
62
|
+
<v-col cols="3">
|
|
63
|
+
<v-text-field label="Titel" v-model="title" hide-details density="compact"></v-text-field>
|
|
64
|
+
</v-col>
|
|
65
|
+
<v-col cols="2">
|
|
66
|
+
<v-select label="Status" v-model="flags" :items="booksService.flags" hide-details density="compact" single-line ></v-select>
|
|
67
|
+
</v-col>
|
|
68
|
+
<v-col cols="1">
|
|
69
|
+
<v-rating label="Rating" hover clearable :length="5" :size="32" v-model="rating" active-color="primary" />
|
|
70
|
+
</v-col>
|
|
71
|
+
<v-col cols="2">
|
|
72
|
+
<v-btn @click=search" prepend-icon="$search">Search</v-btn>
|
|
73
|
+
</v-col>
|
|
74
|
+
</v-row>
|
|
75
|
+
<v-divider></v-divider>
|
|
76
|
+
<book-search-line v-for="book in books" :key="book.bookId" :book="book" :ismobile="isMobile"></book-search-line>
|
|
77
|
+
</v-container>
|
|
78
|
+
</template>
|