mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	**Upgrade to React v18 for Unleash v6. Here's why I think it's a good time to do it:** - Command Bar project: We've begun work on the command bar project, and there's a fantastic library we want to use. However, it requires React v18 support. - Straightforward Upgrade: I took a look at the upgrade guide https://react.dev/blog/2022/03/08/react-18-upgrade-guide and it seems fairly straightforward. In fact, I was able to get React v18 running with minimal changes in just 10 minutes! - Dropping IE Support: React v18 no longer supports Internet Explorer (IE), which is no longer supported by Microsoft as of June 15, 2022. Upgrading to v18 in v6 would be a good way to align with this change. TS updates: * FC children has to be explicit: https://stackoverflow.com/questions/71788254/react-18-typescript-children-fc * forcing version 18 types in resolutions: https://sentry.io/answers/type-is-not-assignable-to-type-reactnode/ Test updates: * fixing SWR issue that we have always had but it manifests more in new React (https://github.com/vercel/swr/issues/2373) --------- Co-authored-by: kwasniew <kwasniewski.mateusz@gmail.com>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { useLocalStorageState } from './useLocalStorageState';
 | 
						|
import { createLocalStorage } from '../utils/createLocalStorage';
 | 
						|
import { render } from 'utils/testRenderer';
 | 
						|
import { screen, waitFor } from '@testing-library/react';
 | 
						|
import type { FC } from 'react';
 | 
						|
 | 
						|
const TestComponent: FC<{
 | 
						|
    keyName: string;
 | 
						|
    initialValue: any;
 | 
						|
}> = ({ keyName, initialValue }) => {
 | 
						|
    const [value, setValue] = useLocalStorageState(keyName, initialValue);
 | 
						|
 | 
						|
    return (
 | 
						|
        <div>
 | 
						|
            <span data-testid='storedValue'>{value}</span>
 | 
						|
            <button
 | 
						|
                type='submit'
 | 
						|
                onClick={() => setValue('updatedValue')}
 | 
						|
                data-testid='updateButton'
 | 
						|
            />
 | 
						|
        </div>
 | 
						|
    );
 | 
						|
};
 | 
						|
 | 
						|
describe('useLocalStorageState', () => {
 | 
						|
    beforeEach(() => {
 | 
						|
        window.localStorage.clear();
 | 
						|
    });
 | 
						|
 | 
						|
    it('should initialize with the initial value if local storage is empty', () => {
 | 
						|
        render(<TestComponent keyName='testKey' initialValue='initialValue' />);
 | 
						|
 | 
						|
        expect(screen.getByTestId('storedValue').textContent).toBe(
 | 
						|
            'initialValue',
 | 
						|
        );
 | 
						|
    });
 | 
						|
 | 
						|
    it('updates the local storage and state when value changes', async () => {
 | 
						|
        render(<TestComponent keyName='testKey' initialValue='initialValue' />);
 | 
						|
 | 
						|
        screen.getByTestId('updateButton').click();
 | 
						|
 | 
						|
        expect((await screen.findByTestId('storedValue')).textContent).toBe(
 | 
						|
            'updatedValue',
 | 
						|
        );
 | 
						|
        await waitFor(() => {
 | 
						|
            const { value } = createLocalStorage('testKey', {});
 | 
						|
            expect(value).toStrictEqual('updatedValue');
 | 
						|
        });
 | 
						|
    });
 | 
						|
 | 
						|
    it('initializes with the value from local storage if available', async () => {
 | 
						|
        createLocalStorage('testKey', {}).setValue('storedValue');
 | 
						|
 | 
						|
        render(<TestComponent keyName='testKey' initialValue='initialValue' />);
 | 
						|
 | 
						|
        expect(screen.getByTestId('storedValue').textContent).toBe(
 | 
						|
            'storedValue',
 | 
						|
        );
 | 
						|
    });
 | 
						|
});
 |