You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			TypeScript
		
	
import { SessionSettingCategory } from '../../components/session/settings/SessionSettings';
 | 
						|
 | 
						|
export const FOCUS_SECTION = 'FOCUS_SECTION';
 | 
						|
export const FOCUS_SETTINGS_SECTION = 'FOCUS_SETTINGS_SECTION';
 | 
						|
export const IS_APP_FOCUSED = 'IS_APP_FOCUSED';
 | 
						|
 | 
						|
export enum SectionType {
 | 
						|
  Profile,
 | 
						|
  Message,
 | 
						|
  Contact,
 | 
						|
  Channel,
 | 
						|
  Settings,
 | 
						|
  Moon,
 | 
						|
  PathIndicator,
 | 
						|
}
 | 
						|
 | 
						|
type FocusSectionActionType = {
 | 
						|
  type: 'FOCUS_SECTION';
 | 
						|
  payload: SectionType;
 | 
						|
};
 | 
						|
 | 
						|
type FocusSettingsSectionActionType = {
 | 
						|
  type: 'FOCUS_SETTINGS_SECTION';
 | 
						|
  payload: SessionSettingCategory;
 | 
						|
};
 | 
						|
 | 
						|
type IsAppFocusedActionType = {
 | 
						|
  type: 'IS_APP_FOCUSED';
 | 
						|
  payload: boolean;
 | 
						|
};
 | 
						|
 | 
						|
export function showLeftPaneSection(section: SectionType): FocusSectionActionType {
 | 
						|
  return {
 | 
						|
    type: FOCUS_SECTION,
 | 
						|
    payload: section,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
type SectionActionTypes = FocusSectionActionType | FocusSettingsSectionActionType;
 | 
						|
 | 
						|
export function setIsAppFocused(focused: boolean): IsAppFocusedActionType {
 | 
						|
  return {
 | 
						|
    type: IS_APP_FOCUSED,
 | 
						|
    payload: focused,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
export function showSettingsSection(
 | 
						|
  category: SessionSettingCategory
 | 
						|
): FocusSettingsSectionActionType {
 | 
						|
  return {
 | 
						|
    type: FOCUS_SETTINGS_SECTION,
 | 
						|
    payload: category,
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
export const actions = {
 | 
						|
  showLeftPaneSection,
 | 
						|
  showSettingsSection,
 | 
						|
};
 | 
						|
 | 
						|
export const initialSectionState: SectionStateType = {
 | 
						|
  focusedSection: SectionType.Message,
 | 
						|
  focusedSettingsSection: undefined,
 | 
						|
  isAppFocused: false,
 | 
						|
};
 | 
						|
 | 
						|
export type SectionStateType = {
 | 
						|
  focusedSection: SectionType;
 | 
						|
  focusedSettingsSection?: SessionSettingCategory;
 | 
						|
  isAppFocused: boolean;
 | 
						|
};
 | 
						|
 | 
						|
export const reducer = (
 | 
						|
  state: any = initialSectionState,
 | 
						|
  {
 | 
						|
    type,
 | 
						|
    payload,
 | 
						|
  }: {
 | 
						|
    type: string;
 | 
						|
    payload: SectionActionTypes;
 | 
						|
  }
 | 
						|
): SectionStateType => {
 | 
						|
  switch (type) {
 | 
						|
    case FOCUS_SECTION:
 | 
						|
      // if we change to something else than settings, reset the focused settings section
 | 
						|
      const castedPayload = (payload as unknown) as SectionType;
 | 
						|
 | 
						|
      if (castedPayload !== SectionType.Settings) {
 | 
						|
        return {
 | 
						|
          ...state,
 | 
						|
          focusedSection: castedPayload,
 | 
						|
          focusedSettingsSection: undefined,
 | 
						|
        };
 | 
						|
      }
 | 
						|
 | 
						|
      // on click on the gear icon: show the appearance tab by default
 | 
						|
      return {
 | 
						|
        ...state,
 | 
						|
        focusedSection: payload,
 | 
						|
        focusedSettingsSection: SessionSettingCategory.Appearance,
 | 
						|
      };
 | 
						|
    case FOCUS_SETTINGS_SECTION:
 | 
						|
      return {
 | 
						|
        ...state,
 | 
						|
        focusedSettingsSection: payload,
 | 
						|
      };
 | 
						|
 | 
						|
    case IS_APP_FOCUSED:
 | 
						|
      return {
 | 
						|
        ...state,
 | 
						|
        isAppFocused: payload,
 | 
						|
      };
 | 
						|
    default:
 | 
						|
      return state;
 | 
						|
  }
 | 
						|
};
 |