Migrated to TS main services except ShlinkApiClient

This commit is contained in:
Alejandro Celaya 2020-08-29 18:51:03 +02:00
parent 64a968711c
commit ebd7a76896
6 changed files with 30 additions and 29 deletions

View file

@ -35,3 +35,6 @@ export const isReachableServer = (server: SelectedServer): server is ReachableSe
export const isServerWithId = (server: SelectedServer | ServerWithId): server is ServerWithId =>
!!server?.hasOwnProperty('id');
export const isNotFoundServer = (server: SelectedServer): server is NotFoundServer =>
!!server?.hasOwnProperty('serverNotFound');

View file

@ -1,7 +1,7 @@
import React, { FC, useEffect } from 'react';
import { RouteChildrenProps } from 'react-router';
import Message from '../../utils/Message';
import { isReachableServer, SelectedServer } from '../data';
import { isNotFoundServer, SelectedServer } from '../data';
interface WithSelectedServerProps extends RouteChildrenProps<{ serverId: string }> {
selectServer: (serverId: string) => void;
@ -21,7 +21,7 @@ export const withSelectedServer = (WrappedComponent: FC<WithSelectedServerProps>
return <Message loading />;
}
if (!isReachableServer(selectedServer)) {
if (isNotFoundServer(selectedServer)) {
return <ServerError />;
}

View file

@ -1,20 +1,21 @@
import PropTypes from 'prop-types';
import { rangeOf } from '../utils';
import LocalStorage from './LocalStorage';
const HEX_COLOR_LENGTH = 6;
const { floor, random } = Math;
const letters = '0123456789ABCDEF';
const buildRandomColor = () =>
`#${rangeOf(HEX_COLOR_LENGTH, () => letters[floor(random() * letters.length)]).join('')}`;
const normalizeKey = (key) => key.toLowerCase().trim();
const buildRandomColor = () => `#${rangeOf(HEX_COLOR_LENGTH, () => letters[floor(random() * letters.length)]).join('')}`;
const normalizeKey = (key: string) => key.toLowerCase().trim();
export default class ColorGenerator {
constructor(storage) {
this.storage = storage;
this.colors = this.storage.get('colors') || {};
private readonly colors: Record<string, string>;
public constructor(private readonly storage: LocalStorage) {
this.colors = this.storage.get<Record<string, string>>('colors') || {};
}
getColorForKey = (key) => {
public readonly getColorForKey = (key: string) => {
const normalizedKey = normalizeKey(key);
const color = this.colors[normalizedKey];
@ -26,7 +27,7 @@ export default class ColorGenerator {
return color;
};
setColorForKey = (key, color) => {
public readonly setColorForKey = (key: string, color: string) => {
const normalizedKey = normalizeKey(key);
this.colors[normalizedKey] = color;
@ -36,6 +37,7 @@ export default class ColorGenerator {
};
}
/** @deprecated Use ColorGenerator class instead */
export const colorGeneratorType = PropTypes.shape({
getColorForKey: PropTypes.func,
setColorForKey: PropTypes.func,

View file

@ -16,8 +16,6 @@ describe('<EditServer />', () => {
name: 'name',
url: 'url',
apiKey: 'apiKey',
printableVersion: 'v1.2.0',
version: '1.2.0'
};
beforeEach(() => {

View file

@ -1,16 +1,16 @@
import { Mock } from 'ts-mockery';
import ColorGenerator from '../../../src/utils/services/ColorGenerator';
import LocalStorage from '../../../src/utils/services/LocalStorage';
describe('ColorGenerator', () => {
let colorGenerator;
const storageMock = {
let colorGenerator: ColorGenerator;
const storageMock = Mock.of<LocalStorage>({
set: jest.fn(),
get: jest.fn(),
};
});
beforeEach(() => {
storageMock.set.mockReset();
storageMock.get.mockReset();
jest.clearAllMocks();
colorGenerator = new ColorGenerator(storageMock);
});

View file

@ -1,16 +1,14 @@
import { Mock } from 'ts-mockery';
import LocalStorage from '../../../src/utils/services/LocalStorage';
describe('LocalStorage', () => {
const localStorageMock = {
getItem: jest.fn((key) => key === 'shlink.foo' ? JSON.stringify({ foo: 'bar' }) : null),
setItem: jest.fn(),
};
let storage;
const getItem = jest.fn((key) => key === 'shlink.foo' ? JSON.stringify({ foo: 'bar' }) : null);
const setItem = jest.fn();
const localStorageMock = Mock.of<Storage>({ getItem, setItem });
let storage: LocalStorage;
beforeEach(() => {
localStorageMock.getItem.mockClear();
localStorageMock.setItem.mockReset();
jest.clearAllMocks();
storage = new LocalStorage(localStorageMock);
});
@ -20,15 +18,15 @@ describe('LocalStorage', () => {
storage.set('foo', value);
expect(localStorageMock.setItem).toHaveBeenCalledTimes(1);
expect(localStorageMock.setItem).toHaveBeenCalledWith('shlink.foo', JSON.stringify(value));
expect(setItem).toHaveBeenCalledTimes(1);
expect(setItem).toHaveBeenCalledWith('shlink.foo', JSON.stringify(value));
});
});
describe('get', () => {
it('fetches item from local storage', () => {
storage.get('foo');
expect(localStorageMock.getItem).toHaveBeenCalledTimes(1);
expect(getItem).toHaveBeenCalledTimes(1);
});
it('returns parsed value when requested value is found in local storage', () => {