diff --git a/services/webui/src/app/store/actions.ts b/services/webui/src/app/store/actions.ts index 5742101..9c103a2 100644 --- a/services/webui/src/app/store/actions.ts +++ b/services/webui/src/app/store/actions.ts @@ -38,7 +38,11 @@ export enum Action { MovieDetails = "MOVIE_DETAILS", CancelMovieRequest = "CANCEL_MOVIE_REQUEST", CreateMovieRequest = "CREATE_MOVIE_REQUEST", - SearchMovies = "SEARCH_MOVIES" + SearchMovies = "SEARCH_MOVIES", + + // Movie Store + UpdateMovies = "UPDATE_MOVIES", + UpdateMovieTickets = "UPDATE_MOVIE_TICKETS" } /** @@ -65,7 +69,10 @@ export type ActionsTypes = { [Action.MovieDetails] : (tmdbId: number | string) => Promise<[number, IApiDataResponse]>, [Action.SearchMovies] : (query: string) => Promise<[number, IPaginatedResponse]>, [Action.CancelMovieRequest] : (ticketId: number) => Promise<[number, IApiResponse]>, - [Action.CreateMovieRequest] : (tmdbId: number | string) => Promise<[number, IApiDataResponse<{ ticketId: number }>]> + [Action.CreateMovieRequest] : (tmdbId: number | string) => Promise<[number, IApiDataResponse<{ ticketId: number }>]>, + + // Movie Store + [Action.UpdateMovies]: (movies: { newValue: IMovie[], oldValue: IMovie[] }) => void } /** @@ -282,5 +289,23 @@ export const actions: Actions 0) { + commit(Mutation.StoreMovies, newValue); + } + if (oldValue.length > 0) { + commit(Mutation.FreeMovies, oldValue); + } + commit(Mutation.UpdateMovieTickets, undefined); } }; diff --git a/services/webui/src/app/store/mutations.ts b/services/webui/src/app/store/mutations.ts index 26d2665..1c33d4c 100644 --- a/services/webui/src/app/store/mutations.ts +++ b/services/webui/src/app/store/mutations.ts @@ -14,8 +14,9 @@ export enum Mutation { UserLoad = "USER_LOAD", UserStore = "USER_STORE", - FreeMovies = "FREE_MOVIES", - StoreMovies = "STORE_MOVIES", + FreeMovies = "FREE_MOVIES", + StoreMovies = "STORE_MOVIES", + UpdateMovieTickets = "UPDATE_MOVIE_TICKETS" } /** @@ -28,8 +29,9 @@ export type MutationsTypes = { [Mutation.LockScroll]: (state: S, lock: boolean) => void, // Movie Store - [Mutation.FreeMovies]: (state: S, movies: IMovie[]) => void, - [Mutation.StoreMovies]: (state: S, movies: IMovie[]) => void + [Mutation.FreeMovies] : (state: S, movies: IMovie[]) => void, + [Mutation.StoreMovies] : (state: S, movies: IMovie[]) => void, + [Mutation.UpdateMovieTickets]: (state: S) => void } /** @@ -127,5 +129,20 @@ export const mutations: MutationsTypes & MutationTree = { } state.movies[movie.tmdbId].refCount++; } + }, + + /** + * Update the cached movie tickets in the store + */ + [Mutation.UpdateMovieTickets](state) { + let tickets: { [ticketId: number]: string } = {}; + for (let tmdbId of Object.keys(state.movies)) { + let ticketId = state.movies[tmdbId].movie.ticketId; + let plexLink = state.movies[tmdbId].movie.plexLink; + if (ticketId !== null && plexLink === null) { + tickets[ticketId] = tmdbId; + } + } + state.movieTickets = tickets; } } diff --git a/services/webui/src/app/store/state.ts b/services/webui/src/app/store/state.ts index a809a08..d2f6e33 100644 --- a/services/webui/src/app/store/state.ts +++ b/services/webui/src/app/store/state.ts @@ -12,6 +12,7 @@ export interface IState { movie: IMovie } }, + movieTickets: { [ticketId: number]: string }, user : IUser | null, modalName : Modal | null, modalVisible: boolean @@ -22,6 +23,7 @@ export interface IState { */ export const state: IState = { movies: {}, + movieTickets: {}, user: null, modalName: null, modalVisible: false,