@christianriedl/media 1.0.182 → 1.0.183

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.
@@ -10,6 +10,8 @@ export declare class BooksService implements IBooksService {
10
10
  cachedAuthors?: IAuthorShort[];
11
11
  categories: string[];
12
12
  flags: string[];
13
+ selectedAuthorId: number;
14
+ selectedBookId: number;
13
15
  constructor(rest: IRest, user: string, statistics: IStatistics, log: ILogger);
14
16
  getAuthors(surName?: string, givenName?: string, withBooks?: boolean, id?: number): Promise<IAuthor[]>;
15
17
  getAuthorsShort(): Promise<IAuthorShort[]>;
@@ -7,13 +7,17 @@ export class BooksService {
7
7
  cachedAuthors;
8
8
  categories;
9
9
  flags;
10
+ selectedAuthorId;
11
+ selectedBookId;
10
12
  constructor(rest, user, statistics, log) {
11
13
  this.log = log;
12
14
  this.rest = rest;
13
15
  this.user = user;
14
16
  this.mediaUrl = rest.serviceUrl;
15
17
  this.categories = ["Literatur", "Geschichte", "Philosophie", "Naturwissenschaft"];
16
- this.flags = ["liesCH", "liesCH", "ausgeborgt"];
18
+ this.flags = ["liesC", "liesH", "ausgeborgt"];
19
+ this.selectedAuthorId = 0;
20
+ this.selectedBookId = 0;
17
21
  }
18
22
  async getAuthors(surName, givenName, withBooks, id) {
19
23
  const info = await this.rest.getData('apibooks/authors', { surName, givenName, withBooks, id });
@@ -1 +1 @@
1
- {"version":3,"file":"booksService.js","sourceRoot":"","sources":["../src/booksService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"booksService.js","sourceRoot":"","sources":["../src/booksService.ts"],"names":[],"mappings":"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"}
package/dist/iBooks.d.ts CHANGED
@@ -35,6 +35,8 @@ export interface IFullBook {
35
35
  export interface IBooksService {
36
36
  categories: string[];
37
37
  flags: string[];
38
+ selectedAuthorId: number;
39
+ selectedBookId: number;
38
40
  getAuthors(surName?: string, givenName?: string, withBooks?: boolean, id?: number): Promise<IAuthor[]>;
39
41
  getAuthorsShort(): Promise<IAuthorShort[]>;
40
42
  addAuthor(author: IAuthor): Promise<number>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@christianriedl/media",
3
- "version": "1.0.182",
3
+ "version": "1.0.183",
4
4
  "description": "RIC media interfaces",
5
5
 
6
6
  "main": "dist/index.js",
@@ -15,6 +15,7 @@
15
15
  const showSelect = ref(!props.add);
16
16
  const showSave = ref(false);
17
17
  const selected = ref<IBook | string | undefined>();
18
+ const flags = ref<string[]>(book.flags ? book.flags.split(',') : []);
18
19
 
19
20
  async function titleChanged(arg: IBook | string) {
20
21
  if (typeof arg == 'string') {
@@ -45,6 +46,10 @@
45
46
  function fieldChanged () {
46
47
  showSave.value = true;
47
48
  }
49
+ function flagsChanged () {
50
+ showSave.value = true;
51
+ book.flags = flags.value.join(',');
52
+ }
48
53
  </script>
49
54
 
50
55
  <template>
@@ -70,7 +75,7 @@
70
75
  <v-rating hover clearable :length="5" :size="32" v-model="book.rating" active-color="primary" @update:modelValue="fieldChanged" />
71
76
  </v-col>
72
77
  <v-col cols="2">
73
- <v-select v-model="book.flags" :items="props.flags" multiple hide-details density="compact" single-line @update:modelValue="fieldChanged"></v-select>
78
+ <v-select v-model="flags" :items="props.flags" multiple hide-details density="compact" single-line @update:modelValue="flagsChanged"></v-select>
74
79
  </v-col>
75
80
  <v-col cols="2">
76
81
  <v-btn v-if="showSave" icon="$save" :disabled="props.readonly" @click="onSave"></v-btn>
@@ -1,11 +1,18 @@
1
1
  <script setup lang="ts">
2
2
  import { IFullBook } from '@christianriedl/media';
3
3
  const props = defineProps<{ book: IFullBook, ismobile?: boolean }>();
4
+ const emits = defineEmits<{
5
+ (e: 'selectbook'): void
6
+ }>();
4
7
  const book = props.book;
8
+
9
+ function onSelect () {
10
+ emits ("selectbook");
11
+ }
5
12
  </script>
6
13
 
7
14
  <template>
8
- <v-row v-if="props.ismobile" dense align="center" class="bg-office">
15
+ <v-row v-if="props.ismobile" dense align="center" class="bg-office" @click="onSelect">
9
16
  <v-col cols="12" >
10
17
  <p class="font-weight-bold">{{book.givenName + ' ' + book.surName}}</p>
11
18
  </v-col>
@@ -13,7 +20,7 @@
13
20
  <p class="font-weight-medium">{{book.title}}</p>
14
21
  </v-col>
15
22
  </v-row>
16
- <v-row v-else dense align="center" :class="cls" @click="onSelect" >
23
+ <v-row v-else dense align="center" class="bg-office" @click="onSelect >
17
24
  <v-col cols="6" >
18
25
  <p class="font-weight-bold">{{book.givenName + ' ' + book.surName}}</p>
19
26
  </v-col>
@@ -1,9 +1,11 @@
1
1
  <script setup lang="ts">
2
2
  import { inject, ref, reactive, onMounted, onUnmounted, computed, StyleValue } from 'vue';
3
+ import { useRouter } from 'vue-router';
3
4
  import { IAppState, appStateSymbol, getOpenAISymbol, IOpenAIService, ICompleteData, EScope, EDevice } from '@christianriedl/utils';
4
5
  import { BooksService, getBooksSymbol, IAuthorShort, IAuthor, IBook } from '@christianriedl/media';
5
6
  import BookLine from '../components/BookLine.vue';
6
7
 
8
+ const router = useRouter();
7
9
  const appState = inject(appStateSymbol)!;
8
10
  const getBooksService = inject(getBooksSymbol)!;
9
11
  const booksService = getBooksService() as BooksService;
@@ -32,6 +34,11 @@
32
34
  if (authorsShort) {
33
35
  authors.splice(0, authors.length, ...authorsShort);
34
36
  }
37
+ �f (booksService.selectedAuthorId) {
38
+ getCurrentAuthor (booksService.selectedAuthorId, true)
39
+ booksService.selectedAuthorId = 0;
40
+ booksService.selectedBookId = 0;
41
+ }
35
42
  }
36
43
  async function addAuthor() {
37
44
  if (!checkAuthor(author))
@@ -121,6 +128,11 @@
121
128
  await getAuthorDataFromAI(author.surName, author.givenName);
122
129
  }
123
130
  }
131
+ function search () {
132
+ booksService.selectedAuthorId = 0;
133
+ booksService.selectedBookId = 0;
134
+ router.push({ path: 'booksearch' });
135
+ }
124
136
  async function addNewBook() {
125
137
  if (lastAllBooksId.value != author.id) {
126
138
  allBooks.value = await getAuthorBooksFromAI (author.surName, author.givenName, author.id);
@@ -262,7 +274,7 @@
262
274
  if (!author.yearOfDeath)
263
275
  author.yearOfDeath = result.sterbetag ? getYear(result.sterbetag) : undefined;
264
276
  if (!author.category)
265
- author.category = categories[0];
277
+ author.category = booksService.categories[0];
266
278
  if (!author.country)
267
279
  author.country = result.geburtsland;
268
280
  return true;
@@ -342,7 +354,10 @@
342
354
  <v-defaults-provider :defaults="{'VBtn':{'size':'large','variant':'flat','class':'bg-office'}}">
343
355
  <v-row v-if="isMobile" dense align="center">
344
356
  <v-col cols="6">Name</v-col>
345
- <v-col cols="6">Vorname</v-col>
357
+ <v-col cols="5">Vorname</v-col>
358
+ <v-col cols="1">
359
+ <v-btn icon="$search" @click="search"></v-btn>
360
+ </v-col>
346
361
  </v-row>
347
362
  <v-row v-else dense align="center">
348
363
  <v-col cols="2">Name</v-col>
@@ -351,6 +366,9 @@
351
366
  <v-col cols="1">Bis</v-col>
352
367
  <v-col cols="2">Kategorie</v-col>
353
368
  <v-col cols="2">Land</v-col>
369
+ <v-col cols="2">
370
+ <v-btn prepend-icon="$search" @click="search">Search</v-btn>
371
+ </v-col>
354
372
  </v-row>
355
373
  <v-row v-if="isMobile" dense align="center">
356
374
  <v-col cols="6">
@@ -400,8 +418,8 @@
400
418
  <v-btn v-if="showAddBookLine" @click="cancelAddNewBook" :disabled="readonly" icon="$cancel"></v-btn>
401
419
  </v-col>
402
420
  </v-row>
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>
421
+ <book-line v-if="showAddBookLine" :book="newBook" :flags="booksService.flags" :add="true" :allbooks="allBooks" :readonly="readonly" :ismobile="isMobile" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
422
+ <book-line v-for="book in author.books" :key="book.id" :book="book" :flags="booksService.flags" :readonly="readonly" :ismobile="isMobile" @selectbook="selectBook" @deletebook="deleteBook" @savebook="saveBook"></book-line>
405
423
  <v-textarea v-if="showCurrentBook" clearable auto-grow variant="outlined" label="Beschreibung" :disabled="isMobile" class="pt-2" v-model="currentBook.description" @update:modelValue="descriptionChanged">
406
424
  </v-textarea>
407
425
  <v-textarea v-if="showCurrentBook" clearable auto-grow variant="outlined" label="Kommentar" :disabled="isMobile" v-model="currentBook.comment" @update:modelValue="descriptionChanged">
@@ -1,15 +1,15 @@
1
1
  <script setup lang="ts">
2
2
  import { inject, ref, reactive, onMounted, onUnmounted, computed, StyleValue } from 'vue';
3
3
  import { IAppState, appStateSymbol, getOpenAISymbol, IOpenAIService, ICompleteData, EScope, EDevice } from '@christianriedl/utils';
4
- import { BooksService, getBooksSymbol, IAuthorShort, IAuthor, IBookFull } from '@christianriedl/media';
4
+ import { BooksService, getBooksSymbol, IAuthorShort, IAuthor, IFullBook } from '@christianriedl/media';
5
5
  import BookSearchLine from '../components/BookSearchLine.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 authors = reactive<IAuthorShort[]>([]);
11
- const books = ref<IBookFull>([]);
12
- const selected = ref<IAuthorShort | string | undefined>();
11
+ const books = ref<IFullBook[]>([]);
12
+ const selected = ref<IAuthorShort>({ id:0, gN: "", sN: "" });
13
13
  const title = ref("");
14
14
  const rating = ref(0);
15
15
  const flags = ref("");
@@ -25,54 +25,62 @@
25
25
  }
26
26
  }
27
27
  async function search() {
28
- books.value = await getFullBooks(selected.sN, selected.gN, title.value, flags.value, rating.value): Promise<IFullBook[]>;
28
+ const sel = selected.value;
29
+ if (sel) {
30
+ books.value = await booksService.getFullBooks(sel.sN, sel.gN, title.value, flags.value, rating.value);
31
+ }
32
+ }
33
+ function select (book: IFullBook) {
34
+ booksService.selectedAuthorId = book.authorId;
35
+ booksService.selectedBookId = book.bookId;
29
36
  }
30
37
  </script>
31
38
 
32
39
  <template>
33
40
  <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>
41
+ <v-defaults-provider :defaults="{'VBtn':{'size':'large','variant':'flat','class':'bg-office'}}">
42
+ <v-row v-if="isMobile" dense align="center">
43
+ <v-col cols="6">
44
+ <v-select v-model="selected" :items="authors" label="Author" return-object item-value="id" item-title="sN" hide-details density="compact" single-line ></v-select>
45
+ </v-col>
46
+ <v-col cols="6">
47
+ <p>{{selected.gN}}</p>
48
+ </v-col>
49
+ <v-col cols="6">
50
+ <v-text-field label="Titel" v-model="title" hide-details density="compact"></v-text-field>
51
+ </v-col>
52
+ <v-col cols="2">
53
+ <v-select label="Status" v-model="flags" :items="booksService.flags" hide-details density="compact" single-line ></v-select>
54
+ </v-col>
55
+ <v-col cols="2">
56
+ <v-rating label="Rating" hover clearable :length="5" :size="16" v-model="rating" active-color="primary" />
57
+ </v-col>
58
+ <v-col cols="2">
59
+ <v-btn @click="search" icon="$search"></v-btn>
60
+ </v-col>
61
+ </v-row>
62
+ <v-row v-else dense align="center">
63
+ <v-col cols="2">
64
+ <v-select v-model="selected" :items="authors" label="Author" return-object item-value="id" item-title="sN" hide-details density="compact" single-line ></v-select>
65
+ </v-col>
66
+ <v-col cols="2">
67
+ <p>{{selected.gN}}</p>
68
+ </v-col>
69
+ <v-col cols="3">
70
+ <v-text-field label="Titel" v-model="title" hide-details density="compact"></v-text-field>
71
+ </v-col>
72
+ <v-col cols="2">
73
+ <v-select label="Status" v-model="flags" :items="booksService.flags" hide-details density="compact" single-line ></v-select>
74
+ </v-col>
75
+ <v-col cols="1">
76
+ <v-rating label="Rating" hover clearable :length="5" :size="32" v-model="rating" active-color="primary" />
77
+ </v-col>
78
+ <v-col cols="2">
79
+ <v-btn @click="search" prepend-icon="$search">Search</v-btn>
80
+ </v-col>
81
+ </v-row>
82
+ <v-divider></v-divider>
83
+ <book-search-line v-for="book in books" :key="book.bookId" :book="book" :ismobile="isMobile" @selectbook="select(book)"></book-search-line>
84
+ </v-defaults-provider>
77
85
  </v-container>
78
86
  </template>