2.0.0 • Published 3 years ago

@hello10/react-hooks v2.0.0

Weekly downloads
1
License
MIT
Repository
github
Last release
3 years ago

Hooks

React Hooks

Singleton

Excerpted from example app

Implementation of useTheme hook using Singleton

import {Singleton} from '@hello10/react-hooks';

export interface ThemeState {
  mode: ThemeMode;
  primary: string;
}

export enum ThemeMode {
  light = 'light',
  dark = 'dark'
}

export interface ThemeOptions extends SingletonOptions<ThemeState> {
  state: ()=> Partial<ThemeState>;
  upper: (s: string)=> string;
}

class Theme extends Singleton<ThemeState, ThemeOptions> {
  initialize (state: Partial<ThemeState>) {
    console.log('initializing...', state);
    return {
      mode: ThemeMode.light,
      primary: '#000000',
      ...state
    };
  }

  toggleMode = ()=> {
    const {mode} = this.state;
    const new_mode = mode === ThemeMode.light ? ThemeMode.dark : ThemeMode.light;
    console.log(`changing to ${new_mode} mode`);
    this.setState({mode: new_mode});
  };

  set primary (primary) {
    this.setState({primary});
  }

  get primary (): string {
    return this.state.primary;
  }

  get mode (): ThemeMode {
    return this.state.mode;
  }

  isDark () {
    return (this.mode === ThemeMode.dark);
  }

  isLight () {
    return (this.mode === ThemeMode.light);
  }

  get name () {
    return this.options.upper(this.mode);
  }
}

export function useTheme (): Theme {
  return Theme.use<ThemeState, ThemeOptions, Theme>({
    state: ()=> {
      return {
        primary: '#663399'
      };
    },
    upper: (s: string)=> s.toUpperCase()
  });
}

export default useTheme;

Consumption of useTheme hook

import React from 'react';

import useTheme from './useTheme';

export default function Button () {
  const theme = useTheme();
  return (
    <button
      onClick={theme.toggleMode}
      style={{
        borderColor: theme.primary,
        color: theme.primary
      }}
    >
      toggle
    </button>
  );
}
2.0.0

3 years ago

1.2.4

4 years ago

1.2.3

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago

0.0.2

4 years ago