ligo/tools/webide/packages/client/src/redux/editor.ts

54 lines
1.3 KiB
TypeScript
Raw Normal View History

import { ActionType as ExamplesActionType, ChangeSelectedAction as ChangeSelectedExampleAction } from './examples';
import { Language } from './types';
export enum ActionType {
ChangeLanguage = 'editor-change-language',
ChangeCode = 'editor-change-code'
}
export interface EditorState {
language: Language;
code: string;
}
export class ChangeLanguageAction {
public readonly type = ActionType.ChangeLanguage;
constructor(public payload: EditorState['language']) {}
}
export class ChangeCodeAction {
public readonly type = ActionType.ChangeCode;
constructor(public payload: EditorState['code']) {}
}
type Action =
| ChangeCodeAction
| ChangeLanguageAction
| ChangeSelectedExampleAction;
const DEFAULT_STATE: EditorState = {
language: Language.CameLigo,
code: ''
};
export default (state = DEFAULT_STATE, action: Action): EditorState => {
switch (action.type) {
case ExamplesActionType.ChangeSelected:
return {
...state,
...(!action.payload ? DEFAULT_STATE : action.payload.editor)
};
case ActionType.ChangeLanguage:
return {
...state,
language: action.payload
};
case ActionType.ChangeCode:
return {
...state,
code: action.payload
};
}
return state;
};