Change search to use query params in web UI (#32949)
This commit is contained in:
parent
708919ee93
commit
0636bcdbe1
28 changed files with 1396 additions and 1270 deletions
74
app/javascript/mastodon/reducers/search.ts
Normal file
74
app/javascript/mastodon/reducers/search.ts
Normal file
|
@ -0,0 +1,74 @@
|
|||
import { createReducer, isAnyOf } from '@reduxjs/toolkit';
|
||||
|
||||
import type { ApiSearchType } from 'mastodon/api_types/search';
|
||||
import type { RecentSearch, SearchResults } from 'mastodon/models/search';
|
||||
import { createSearchResults } from 'mastodon/models/search';
|
||||
|
||||
import {
|
||||
updateSearchHistory,
|
||||
submitSearch,
|
||||
expandSearch,
|
||||
} from '../actions/search';
|
||||
|
||||
interface State {
|
||||
recent: RecentSearch[];
|
||||
q: string;
|
||||
type?: ApiSearchType;
|
||||
loading: boolean;
|
||||
results?: SearchResults;
|
||||
}
|
||||
|
||||
const initialState: State = {
|
||||
recent: [],
|
||||
q: '',
|
||||
type: undefined,
|
||||
loading: false,
|
||||
results: undefined,
|
||||
};
|
||||
|
||||
export const searchReducer = createReducer(initialState, (builder) => {
|
||||
builder.addCase(submitSearch.fulfilled, (state, action) => {
|
||||
state.q = action.meta.arg.q;
|
||||
state.type = action.meta.arg.type;
|
||||
state.results = createSearchResults(action.payload);
|
||||
state.loading = false;
|
||||
});
|
||||
|
||||
builder.addCase(expandSearch.fulfilled, (state, action) => {
|
||||
const type = action.meta.arg.type;
|
||||
const results = createSearchResults(action.payload);
|
||||
|
||||
state.type = type;
|
||||
state.results = {
|
||||
accounts: state.results
|
||||
? [...state.results.accounts, ...results.accounts]
|
||||
: results.accounts,
|
||||
statuses: state.results
|
||||
? [...state.results.statuses, ...results.statuses]
|
||||
: results.statuses,
|
||||
hashtags: state.results
|
||||
? [...state.results.hashtags, ...results.hashtags]
|
||||
: results.hashtags,
|
||||
};
|
||||
state.loading = false;
|
||||
});
|
||||
|
||||
builder.addCase(updateSearchHistory, (state, action) => {
|
||||
state.recent = action.payload;
|
||||
});
|
||||
|
||||
builder.addMatcher(
|
||||
isAnyOf(expandSearch.pending, submitSearch.pending),
|
||||
(state, action) => {
|
||||
state.type = action.meta.arg.type;
|
||||
state.loading = true;
|
||||
},
|
||||
);
|
||||
|
||||
builder.addMatcher(
|
||||
isAnyOf(expandSearch.rejected, submitSearch.rejected),
|
||||
(state) => {
|
||||
state.loading = false;
|
||||
},
|
||||
);
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue