Define UiSettings which are no longer part of shlink-web-component

This commit is contained in:
Alejandro Celaya 2023-08-19 17:21:34 +02:00
parent de0b735eab
commit b2e6e7db61
5 changed files with 23 additions and 11 deletions

View file

@ -8,6 +8,10 @@ updates:
time: '09:00' time: '09:00'
timezone: 'Europe/Madrid' timezone: 'Europe/Madrid'
open-pull-requests-limit: 10 open-pull-requests-limit: 10
ignore:
# Bootstrap can introduce visual breaking changes on styles
# Ignore it, since the plan is to remove it anyway
- dependency-name: 'bootstrap'
- package-ecosystem: docker - package-ecosystem: docker
directory: '/' directory: '/'
schedule: schedule:

View file

@ -1,5 +1,4 @@
import { changeThemeInMarkup } from '@shlinkio/shlink-frontend-kit'; import { changeThemeInMarkup } from '@shlinkio/shlink-frontend-kit';
import type { Settings } from '@shlinkio/shlink-web-component';
import classNames from 'classnames'; import classNames from 'classnames';
import type { FC } from 'react'; import type { FC } from 'react';
import { useEffect } from 'react'; import { useEffect } from 'react';
@ -7,13 +6,14 @@ import { Route, Routes, useLocation } from 'react-router-dom';
import { AppUpdateBanner } from '../common/AppUpdateBanner'; import { AppUpdateBanner } from '../common/AppUpdateBanner';
import { NotFound } from '../common/NotFound'; import { NotFound } from '../common/NotFound';
import type { ServersMap } from '../servers/data'; import type { ServersMap } from '../servers/data';
import type { AppSettings } from '../settings/reducers/settings';
import { forceUpdate } from '../utils/helpers/sw'; import { forceUpdate } from '../utils/helpers/sw';
import './App.scss'; import './App.scss';
interface AppProps { interface AppProps {
fetchServers: () => void; fetchServers: () => void;
servers: ServersMap; servers: ServersMap;
settings: Settings; settings: AppSettings;
resetAppUpdate: () => void; resetAppUpdate: () => void;
appUpdated: boolean; appUpdated: boolean;
} }

View file

@ -2,12 +2,12 @@ import { faMoon, faSun } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import type { Theme } from '@shlinkio/shlink-frontend-kit'; import type { Theme } from '@shlinkio/shlink-frontend-kit';
import { changeThemeInMarkup, SimpleCard, ToggleSwitch } from '@shlinkio/shlink-frontend-kit'; import { changeThemeInMarkup, SimpleCard, ToggleSwitch } from '@shlinkio/shlink-frontend-kit';
import type { Settings, UiSettings } from '@shlinkio/shlink-web-component';
import type { FC } from 'react'; import type { FC } from 'react';
import type { AppSettings, UiSettings } from './reducers/settings';
import './UserInterfaceSettings.scss'; import './UserInterfaceSettings.scss';
interface UserInterfaceProps { interface UserInterfaceProps {
settings: Settings; settings: AppSettings;
setUiSettings: (settings: UiSettings) => void; setUiSettings: (settings: UiSettings) => void;
} }

View file

@ -1,11 +1,11 @@
import type { PayloadAction, PrepareAction } from '@reduxjs/toolkit'; import type { PayloadAction, PrepareAction } from '@reduxjs/toolkit';
import { createSlice } from '@reduxjs/toolkit'; import { createSlice } from '@reduxjs/toolkit';
import type { Theme } from '@shlinkio/shlink-frontend-kit';
import type { import type {
Settings, Settings,
ShortUrlCreationSettings, ShortUrlCreationSettings,
ShortUrlsListSettings, ShortUrlsListSettings,
TagsSettings, TagsSettings,
UiSettings,
VisitsSettings, VisitsSettings,
} from '@shlinkio/shlink-web-component'; } from '@shlinkio/shlink-web-component';
import { mergeDeepRight } from 'ramda'; import { mergeDeepRight } from 'ramda';
@ -18,7 +18,15 @@ export const DEFAULT_SHORT_URLS_ORDERING: ShortUrlsOrder = {
dir: 'DESC', dir: 'DESC',
}; };
const initialState: Settings = { export type UiSettings = {
theme: Theme;
};
export type AppSettings = Settings & {
ui?: UiSettings;
};
const initialState: AppSettings = {
realTimeUpdates: { realTimeUpdates: {
enabled: true, enabled: true,
}, },
@ -36,12 +44,12 @@ const initialState: Settings = {
}, },
}; };
type SettingsAction = PayloadAction<Settings>; type SettingsAction = PayloadAction<AppSettings>;
type SettingsPrepareAction = PrepareAction<Settings>; type SettingsPrepareAction = PrepareAction<AppSettings>;
const commonReducer = (state: Settings, { payload }: SettingsAction) => mergeDeepRight(state, payload); const commonReducer = (state: AppSettings, { payload }: SettingsAction) => mergeDeepRight(state, payload);
const toReducer = (prepare: SettingsPrepareAction) => ({ reducer: commonReducer, prepare }); const toReducer = (prepare: SettingsPrepareAction) => ({ reducer: commonReducer, prepare });
const toPreparedAction: SettingsPrepareAction = (payload: Settings) => ({ payload }); const toPreparedAction: SettingsPrepareAction = (payload: AppSettings) => ({ payload });
const { reducer, actions } = createSlice({ const { reducer, actions } = createSlice({
name: 'shlink/settings', name: 'shlink/settings',

View file

@ -1,7 +1,7 @@
import type { Theme } from '@shlinkio/shlink-frontend-kit'; import type { Theme } from '@shlinkio/shlink-frontend-kit';
import type { UiSettings } from '@shlinkio/shlink-web-component';
import { screen } from '@testing-library/react'; import { screen } from '@testing-library/react';
import { fromPartial } from '@total-typescript/shoehorn'; import { fromPartial } from '@total-typescript/shoehorn';
import type { UiSettings } from '../../src/settings/reducers/settings';
import { UserInterfaceSettings } from '../../src/settings/UserInterfaceSettings'; import { UserInterfaceSettings } from '../../src/settings/UserInterfaceSettings';
import { renderWithEvents } from '../__helpers__/setUpTest'; import { renderWithEvents } from '../__helpers__/setUpTest';