Changed format on action types and reducer names for those already migrated to RTK

This commit is contained in:
Alejandro Celaya
2022-11-09 18:19:07 +01:00
parent 89423737e8
commit fe85291772
15 changed files with 48 additions and 49 deletions

View File

@@ -1,7 +1,7 @@
import { createSlice } from '@reduxjs/toolkit'; import { createSlice } from '@reduxjs/toolkit';
const { actions, reducer } = createSlice({ const { actions, reducer } = createSlice({
name: 'appUpdatesReducer', name: 'shlink/appUpdates',
initialState: false, initialState: false,
reducers: { reducers: {
appUpdateAvailable: () => true, appUpdateAvailable: () => true,

View File

@@ -9,7 +9,7 @@ const initialState: Sidebar = {
}; };
const { actions, reducer } = createSlice({ const { actions, reducer } = createSlice({
name: 'sidebarReducer', name: 'shlink/sidebar',
initialState, initialState,
reducers: { reducers: {
sidebarPresent: () => ({ sidebarPresent: true }), sidebarPresent: () => ({ sidebarPresent: true }),

View File

@@ -9,9 +9,7 @@ import { ProblemDetailsError } from '../../api/types/errors';
import { parseApiError } from '../../api/utils'; import { parseApiError } from '../../api/utils';
import { EditDomainRedirects } from './domainRedirects'; import { EditDomainRedirects } from './domainRedirects';
const LIST_DOMAINS = 'shlink/domainsList/LIST_DOMAINS'; const REDUCER_PREFIX = 'shlink/domainsList';
const FILTER_DOMAINS = 'shlink/domainsList/FILTER_DOMAINS';
const VALIDATE_DOMAIN = 'shlink/domainsList/VALIDATE_DOMAIN';
export interface DomainsList { export interface DomainsList {
domains: Domain[]; domains: Domain[];
@@ -49,7 +47,7 @@ export const domainsListReducerCreator = (
buildShlinkApiClient: ShlinkApiClientBuilder, buildShlinkApiClient: ShlinkApiClientBuilder,
editDomainRedirects: AsyncThunk<EditDomainRedirects, any, any>, editDomainRedirects: AsyncThunk<EditDomainRedirects, any, any>,
) => { ) => {
const listDomains = createAsyncThunk(LIST_DOMAINS, async (_: void, { getState }): Promise<ListDomains> => { const listDomains = createAsyncThunk(`${REDUCER_PREFIX}/listDomains`, async (_: void, { getState }): Promise<ListDomains> => {
const { listDomains: shlinkListDomains } = buildShlinkApiClient(getState); const { listDomains: shlinkListDomains } = buildShlinkApiClient(getState);
const { data, defaultRedirects } = await shlinkListDomains(); const { data, defaultRedirects } = await shlinkListDomains();
@@ -60,7 +58,7 @@ export const domainsListReducerCreator = (
}); });
const checkDomainHealth = createAsyncThunk( const checkDomainHealth = createAsyncThunk(
VALIDATE_DOMAIN, `${REDUCER_PREFIX}/checkDomainHealth`,
async (domain: string, { getState }): Promise<ValidateDomain> => { async (domain: string, { getState }): Promise<ValidateDomain> => {
const { selectedServer } = getState(); const { selectedServer } = getState();
@@ -84,10 +82,10 @@ export const domainsListReducerCreator = (
}, },
); );
const filterDomains = createAction<string>(FILTER_DOMAINS); const filterDomains = createAction<string>(`${REDUCER_PREFIX}/filterDomains`);
const { reducer } = createSlice<DomainsList, SliceCaseReducers<DomainsList>>({ const { reducer } = createSlice<DomainsList, SliceCaseReducers<DomainsList>>({
name: 'domainsList', name: REDUCER_PREFIX,
initialState, initialState,
reducers: {}, reducers: {},
extraReducers: (builder) => { extraReducers: (builder) => {

View File

@@ -3,7 +3,7 @@
@import './utils/base'; @import './utils/base';
@import 'node_modules/bootstrap/scss/bootstrap.scss'; @import 'node_modules/bootstrap/scss/bootstrap.scss';
@import './common/react-tag-autocomplete.scss'; @import './common/react-tag-autocomplete.scss';
@import './theme/theme'; @import 'utils/theme/theme';
@import './utils/table/ResponsiveTable'; @import './utils/table/ResponsiveTable';
@import './utils/StickyCardPaginator'; @import './utils/StickyCardPaginator';

View File

@@ -3,7 +3,7 @@ import { createAsyncThunk } from '../../utils/helpers/redux';
import { ShlinkMercureInfo } from '../../api/types'; import { ShlinkMercureInfo } from '../../api/types';
import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder'; import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';
const GET_MERCURE_INFO = 'shlink/mercure/GET_MERCURE_INFO'; const REDUCER_PREFIX = 'shlink/mercure';
export interface MercureInfo extends Partial<ShlinkMercureInfo> { export interface MercureInfo extends Partial<ShlinkMercureInfo> {
interval?: number; interval?: number;
@@ -17,17 +17,20 @@ const initialState: MercureInfo = {
}; };
export const mercureInfoReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder) => { export const mercureInfoReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder) => {
const loadMercureInfo = createAsyncThunk(GET_MERCURE_INFO, (_: void, { getState }): Promise<ShlinkMercureInfo> => { const loadMercureInfo = createAsyncThunk(
const { settings } = getState(); `${REDUCER_PREFIX}/loadMercureInfo`,
if (!settings.realTimeUpdates.enabled) { (_: void, { getState }): Promise<ShlinkMercureInfo> => {
throw new Error('Real time updates not enabled'); const { settings } = getState();
} if (!settings.realTimeUpdates.enabled) {
throw new Error('Real time updates not enabled');
}
return buildShlinkApiClient(getState).mercureInfo(); return buildShlinkApiClient(getState).mercureInfo();
}); },
);
const { reducer } = createSlice({ const { reducer } = createSlice({
name: 'mercureInfoReducer', name: REDUCER_PREFIX,
initialState, initialState,
reducers: {}, reducers: {},
extraReducers: (builder) => { extraReducers: (builder) => {

View File

@@ -26,7 +26,7 @@ const serverWithId = (server: ServerWithId | ServerData): ServerWithId => {
const serversListToMap = reduce<ServerWithId, ServersMap>((acc, server) => assoc(server.id, server, acc), {}); const serversListToMap = reduce<ServerWithId, ServersMap>((acc, server) => assoc(server.id, server, acc), {});
export const { actions, reducer } = createSlice({ export const { actions, reducer } = createSlice({
name: 'serversReducer', name: 'shlink/servers',
initialState, initialState,
reducers: { reducers: {
editServer: { editServer: {

View File

@@ -82,7 +82,7 @@ const toReducer = (prepare: SettingsPrepareAction) => ({ reducer: commonReducer,
const toPreparedAction: SettingsPrepareAction = (payload: Settings) => ({ payload }); const toPreparedAction: SettingsPrepareAction = (payload: Settings) => ({ payload });
const { reducer, actions } = createSlice({ const { reducer, actions } = createSlice({
name: 'settingsReducer', name: 'shlink/settings',
initialState, initialState,
reducers: { reducers: {
toggleRealTimeUpdates: toReducer((enabled: boolean) => toPreparedAction({ realTimeUpdates: { enabled } })), toggleRealTimeUpdates: toReducer((enabled: boolean) => toPreparedAction({ realTimeUpdates: { enabled } })),

View File

@@ -5,7 +5,8 @@ import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilde
import { parseApiError } from '../../api/utils'; import { parseApiError } from '../../api/utils';
import { ProblemDetailsError } from '../../api/types/errors'; import { ProblemDetailsError } from '../../api/types/errors';
export const CREATE_SHORT_URL = 'shlink/createShortUrl/CREATE_SHORT_URL'; const REDUCER_PREFIX = 'shlink/shortUrlCreation';
export const CREATE_SHORT_URL = `${REDUCER_PREFIX}/createShortUrl`;
export type ShortUrlCreation = { export type ShortUrlCreation = {
saving: false; saving: false;
@@ -45,7 +46,7 @@ export const createShortUrl = (buildShlinkApiClient: ShlinkApiClientBuilder) =>
export const shortUrlCreationReducerCreator = (createShortUrlThunk: ReturnType<typeof createShortUrl>) => { export const shortUrlCreationReducerCreator = (createShortUrlThunk: ReturnType<typeof createShortUrl>) => {
const { reducer, actions } = createSlice({ const { reducer, actions } = createSlice({
name: 'shortUrlCreationReducer', name: REDUCER_PREFIX,
initialState: initialState as ShortUrlCreation, // Without this casting it infers type ShortUrlCreationWaiting initialState: initialState as ShortUrlCreation, // Without this casting it infers type ShortUrlCreationWaiting
reducers: { reducers: {
resetCreateShortUrl: () => initialState, resetCreateShortUrl: () => initialState,

View File

@@ -5,7 +5,8 @@ import { parseApiError } from '../../api/utils';
import { ProblemDetailsError } from '../../api/types/errors'; import { ProblemDetailsError } from '../../api/types/errors';
import { ShortUrlIdentifier } from '../data'; import { ShortUrlIdentifier } from '../data';
export const SHORT_URL_DELETED = 'shlink/deleteShortUrl/SHORT_URL_DELETED'; const REDUCER_PREFIX = 'shlink/shortUrlDeletion';
export const SHORT_URL_DELETED = `${REDUCER_PREFIX}/deleteShortUrl`;
export interface ShortUrlDeletion { export interface ShortUrlDeletion {
shortCode: string; shortCode: string;
@@ -35,7 +36,7 @@ export const shortUrlDeletionReducerCreator = (buildShlinkApiClient: ShlinkApiCl
); );
const { actions, reducer } = createSlice({ const { actions, reducer } = createSlice({
name: 'shortUrlDeletion', name: REDUCER_PREFIX,
initialState, initialState,
reducers: { reducers: {
resetDeleteShortUrl: () => initialState, resetDeleteShortUrl: () => initialState,

View File

@@ -6,7 +6,7 @@ import { shortUrlMatches } from '../helpers';
import { parseApiError } from '../../api/utils'; import { parseApiError } from '../../api/utils';
import { ProblemDetailsError } from '../../api/types/errors'; import { ProblemDetailsError } from '../../api/types/errors';
const GET_SHORT_URL_DETAIL = 'shlink/shortUrlDetail/GET_SHORT_URL_DETAIL'; const REDUCER_PREFIX = 'shlink/shortUrlDetail';
export interface ShortUrlDetail { export interface ShortUrlDetail {
shortUrl?: ShortUrl; shortUrl?: ShortUrl;
@@ -24,7 +24,7 @@ const initialState: ShortUrlDetail = {
export const shortUrlDetailReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder) => { export const shortUrlDetailReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder) => {
const getShortUrlDetail = createAsyncThunk( const getShortUrlDetail = createAsyncThunk(
GET_SHORT_URL_DETAIL, `${REDUCER_PREFIX}/getShortUrlDetail`,
async ({ shortCode, domain }: ShortUrlIdentifier, { getState }): Promise<ShortUrl> => { async ({ shortCode, domain }: ShortUrlIdentifier, { getState }): Promise<ShortUrl> => {
const { shortUrlsList } = getState(); const { shortUrlsList } = getState();
const alreadyLoaded = shortUrlsList?.shortUrls?.data.find((url) => shortUrlMatches(url, shortCode, domain)); const alreadyLoaded = shortUrlsList?.shortUrls?.data.find((url) => shortUrlMatches(url, shortCode, domain));
@@ -34,7 +34,7 @@ export const shortUrlDetailReducerCreator = (buildShlinkApiClient: ShlinkApiClie
); );
const { reducer } = createSlice({ const { reducer } = createSlice({
name: 'shortUrlDetailReducer', name: REDUCER_PREFIX,
initialState, initialState,
reducers: {}, reducers: {},
extraReducers: (builder) => { extraReducers: (builder) => {

View File

@@ -5,7 +5,8 @@ import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilde
import { parseApiError } from '../../api/utils'; import { parseApiError } from '../../api/utils';
import { ProblemDetailsError } from '../../api/types/errors'; import { ProblemDetailsError } from '../../api/types/errors';
export const SHORT_URL_EDITED = 'shlink/shortUrlEdition/SHORT_URL_EDITED'; const REDUCER_PREFIX = 'shlink/shortUrlEdition';
export const SHORT_URL_EDITED = `${REDUCER_PREFIX}/editShortUrl`;
export interface ShortUrlEdition { export interface ShortUrlEdition {
shortUrl?: ShortUrl; shortUrl?: ShortUrl;
@@ -37,7 +38,7 @@ export const shortUrlEditionReducerCreator = (buildShlinkApiClient: ShlinkApiCli
); );
const { reducer } = createSlice({ const { reducer } = createSlice({
name: 'shortUrlEditionReducer', name: REDUCER_PREFIX,
initialState, initialState,
reducers: {}, reducers: {},
extraReducers: (builder) => { extraReducers: (builder) => {

View File

@@ -1,11 +1,10 @@
import { createAction, createSlice, PayloadAction } from '@reduxjs/toolkit'; import { createAction, createSlice } from '@reduxjs/toolkit';
import { createAsyncThunk } from '../../utils/helpers/redux'; import { createAsyncThunk } from '../../utils/helpers/redux';
import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder'; import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilder';
import { parseApiError } from '../../api/utils'; import { parseApiError } from '../../api/utils';
import { ProblemDetailsError } from '../../api/types/errors'; import { ProblemDetailsError } from '../../api/types/errors';
const DELETE_TAG = 'shlink/deleteTag/DELETE_TAG'; const REDUCER_PREFIX = 'shlink/tagDelete';
const TAG_DELETED = 'shlink/deleteTag/TAG_DELETED';
export interface TagDeletion { export interface TagDeletion {
deleting: boolean; deleting: boolean;
@@ -14,24 +13,22 @@ export interface TagDeletion {
errorData?: ProblemDetailsError; errorData?: ProblemDetailsError;
} }
export type DeleteTagAction = PayloadAction<string>;
const initialState: TagDeletion = { const initialState: TagDeletion = {
deleting: false, deleting: false,
deleted: false, deleted: false,
error: false, error: false,
}; };
export const tagDeleted = createAction<string>(TAG_DELETED); export const tagDeleted = createAction<string>(`${REDUCER_PREFIX}/tagDeleted`);
export const tagDeleteReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder) => { export const tagDeleteReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder) => {
const deleteTag = createAsyncThunk(DELETE_TAG, async (tag: string, { getState }): Promise<void> => { const deleteTag = createAsyncThunk(`${REDUCER_PREFIX}/deleteTag`, async (tag: string, { getState }): Promise<void> => {
const { deleteTags } = buildShlinkApiClient(getState); const { deleteTags } = buildShlinkApiClient(getState);
await deleteTags([tag]); await deleteTags([tag]);
}); });
const { reducer } = createSlice({ const { reducer } = createSlice({
name: 'tagDeleteReducer', name: REDUCER_PREFIX,
initialState, initialState,
reducers: {}, reducers: {},
extraReducers: (builder) => { extraReducers: (builder) => {

View File

@@ -6,8 +6,7 @@ import { ShlinkApiClientBuilder } from '../../api/services/ShlinkApiClientBuilde
import { parseApiError } from '../../api/utils'; import { parseApiError } from '../../api/utils';
import { ProblemDetailsError } from '../../api/types/errors'; import { ProblemDetailsError } from '../../api/types/errors';
const EDIT_TAG = 'shlink/editTag/EDIT_TAG'; const REDUCER_PREFIX = 'shlink/tagEdit';
const TAG_EDITED = 'shlink/editTag/TAG_EDITED';
export interface TagEdition { export interface TagEdition {
oldName?: string; oldName?: string;
@@ -32,11 +31,11 @@ const initialState: TagEdition = {
error: false, error: false,
}; };
export const tagEdited = createAction<EditTag>(TAG_EDITED); export const tagEdited = createAction<EditTag>(`${REDUCER_PREFIX}/tagEdited`);
export const tagEditReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder, colorGenerator: ColorGenerator) => { export const tagEditReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuilder, colorGenerator: ColorGenerator) => {
const editTag = createAsyncThunk( const editTag = createAsyncThunk(
EDIT_TAG, `${REDUCER_PREFIX}/editTag`,
async ({ oldName, newName, color }: EditTag, { getState }): Promise<EditTag> => { async ({ oldName, newName, color }: EditTag, { getState }): Promise<EditTag> => {
await buildShlinkApiClient(getState).editTag(oldName, newName); await buildShlinkApiClient(getState).editTag(oldName, newName);
colorGenerator.setColorForKey(newName, color); colorGenerator.setColorForKey(newName, color);
@@ -46,7 +45,7 @@ export const tagEditReducerCreator = (buildShlinkApiClient: ShlinkApiClientBuild
); );
const { reducer } = createSlice({ const { reducer } = createSlice({
name: 'tagEditReducer', name: REDUCER_PREFIX,
initialState, initialState,
reducers: {}, reducers: {},
extraReducers: (builder) => { extraReducers: (builder) => {

View File

@@ -12,8 +12,7 @@ import { tagDeleted } from './tagDelete';
import { tagEdited } from './tagEdit'; import { tagEdited } from './tagEdit';
import { ProblemDetailsError } from '../../api/types/errors'; import { ProblemDetailsError } from '../../api/types/errors';
const LIST_TAGS = 'shlink/tagsList/LIST_TAGS'; const REDUCER_PREFIX = 'shlink/tagsList';
const FILTER_TAGS = 'shlink/tagsList/FILTER_TAGS';
type TagsStatsMap = Record<string, TagStats>; type TagsStatsMap = Record<string, TagStats>;
@@ -66,7 +65,7 @@ const calculateVisitsPerTag = (createdVisits: CreateVisit[]): TagIncrease[] => O
); );
export const listTags = (buildShlinkApiClient: ShlinkApiClientBuilder, force = true) => createAsyncThunk( export const listTags = (buildShlinkApiClient: ShlinkApiClientBuilder, force = true) => createAsyncThunk(
LIST_TAGS, `${REDUCER_PREFIX}/listTags`,
async (_: void, { getState }): Promise<ListTags> => { async (_: void, { getState }): Promise<ListTags> => {
const { tagsList } = getState(); const { tagsList } = getState();
@@ -86,13 +85,13 @@ export const listTags = (buildShlinkApiClient: ShlinkApiClientBuilder, force = t
}, },
); );
export const filterTags = createAction<string>(FILTER_TAGS); export const filterTags = createAction<string>(`${REDUCER_PREFIX}/filterTags`);
export const reducer = ( export const reducer = (
listTagsThunk: ReturnType<typeof listTags>, listTagsThunk: ReturnType<typeof listTags>,
createShortUrlThunk: ReturnType<typeof createShortUrl>, createShortUrlThunk: ReturnType<typeof createShortUrl>,
) => createSlice({ ) => createSlice({
name: 'shlink/tagsList', name: REDUCER_PREFIX,
initialState, initialState,
reducers: {}, reducers: {},
extraReducers: (builder) => { extraReducers: (builder) => {

View File

@@ -1,4 +1,4 @@
@import '../utils/base'; @import '../base';
// Light theme colors // Light theme colors
$lightPrimaryColor: #ffffff; $lightPrimaryColor: #ffffff;