import utils from "../helpers/utils" ; export interface State { queries : Model . Query [ ] ; } interface SetQueries { type : "SET_QUERIES" ; payload : { queries : Model . Query [ ] ; } ; } interface InsertQueryAction { type : "INSERT_QUERY" ; payload : { query : Model . Query ; } ; } interface DeleteQueryByIdAction { type : "DELETE_QUERY_BY_ID" ; payload : { id : string ; } ; } interface UpdateQueryAction { type : "UPDATE_QUERY" ; payload : Model . Query ; } export type Actions = SetQueries | InsertQueryAction | DeleteQueryByIdAction | UpdateQueryAction ; export function reducer ( state , action ) { switch ( action . type ) { case "SET_QUERIES" : { const queries = utils . dedupeObjectWithId ( action . payload . queries . sort ( ( a , b ) => utils . getTimeStampByDate ( b . createdAt ) - utils . getTimeStampByDate ( a . createdAt ) ) . sort ( ( a , b ) => utils . getTimeStampByDate ( b . pinnedAt ?? 0 ) - utils . getTimeStampByDate ( a . pinnedAt ?? 0 ) ) ) ; return { ... state , queries , } ; } case "INSERT_QUERY" : { const queries = utils . dedupeObjectWithId ( [ action . payload . query , ... state . queries ] . sort ( ( a , b ) => utils . getTimeStampByDate ( b . createdAt ) - utils . getTimeStampByDate ( a . createdAt ) ) ) ; return { ... state , queries , } ; } case "DELETE_QUERY_BY_ID" : { return { ... state , queries : [ ... state . queries ] . filter ( ( query ) => query . id !== action . payload . id ) , } ; } case "UPDATE_QUERY" : { const queries = state . queries . map ( ( m ) => { if ( m . id === action . payload . id ) { return { ... m , ... action . payload , } ; } else { return m ; } } ) ; return { ... state , queries , } ; } default : { return state ; } } } export const defaultState = { queries : [ ] , } ;