11import { defineStore } from 'pinia'
2+ import type { FeedType } from '@/utils/types.ts'
3+ import { getFeedBaseUrl } from '@/utils/helpers.ts'
24
35interface Attachment {
46 url : string ;
@@ -26,7 +28,9 @@ interface FeedState {
2628 items : FeedItem [ ]
2729 total : number
2830 filters : Record < 'default' | string , FilterRecord >
29- isLoading : boolean
31+ isLoading : boolean ,
32+ type : FeedType ,
33+ url : string ,
3034}
3135
3236export const useFeedStore = defineStore ( 'feed' , {
@@ -35,6 +39,8 @@ export const useFeedStore = defineStore('feed', {
3539 items : [ ] ,
3640 total : 0 ,
3741 isLoading : false ,
42+ type : 'generic' ,
43+ url : getFeedBaseUrl ( 'generic' ) ,
3844 filters : {
3945 default : { exclude : [ 'viewed' , 'not_interesting' ] } ,
4046 favorites : { exclude : [ 'not_interesting' ] } ,
@@ -60,19 +66,18 @@ export const useFeedStore = defineStore('feed', {
6066
6167 if ( ! this . filters [ category ] ) {
6268 this . filters [ category ] = {
63- ...this . filters . default ,
64- ...filters as FilterRecord ,
69+ ...this . filters . default
6570 }
66- } else {
67- for ( const key of Object . keys ( filters ) ) {
68- if ( filters [ key ] !== null ) {
69- this . filters [ category ] = {
70- ...this . filters [ category ] ,
71- [ key ] : filters [ key ] ,
72- }
73- } else {
74- delete this . filters [ category ] [ key ]
71+ }
72+
73+ for ( const key of Object . keys ( filters ) ) {
74+ if ( filters [ key ] !== null ) {
75+ this . filters [ category ] = {
76+ ...this . filters [ category ] ,
77+ [ key ] : filters [ key ]
7578 }
79+ } else {
80+ delete this . filters [ category ] [ key ]
7681 }
7782 }
7883 } ,
@@ -90,6 +95,27 @@ export const useFeedStore = defineStore('feed', {
9095 } ,
9196 appendItems ( items : FeedItem [ ] ) {
9297 this . items = this . items . concat ( items )
98+ } ,
99+ async fetchByUrl ( url : string , initial : boolean = true ) {
100+ if ( initial ) {
101+ this . isLoading = true
102+ this . items = [ ]
103+ }
104+
105+ const response = await fetch ( url )
106+ . then ( response => response . json ( ) )
107+
108+ if ( initial ) {
109+ this . items = response . results
110+ } else {
111+ this . items = this . items . concat ( response . results )
112+ }
113+
114+ if ( initial ) {
115+ this . isLoading = false
116+ }
117+
118+ return response
93119 }
94120 }
95121} )
0 commit comments