import { ApiError } from '@goofy-client/tech-shared'; import { UserProfileResource } from '@goofy-client/user-profile-shared'; import { ActionCreator, createAction, props } from '@ngrx/store'; import { TypedAction } from '@ngrx/store/src/models'; import { UserSettings, UserSettingsResource } from '../user-settings.model'; //TODO centralize ActionCreate export interface UserSettingsActionCreator<T> extends ActionCreator<string, (props: T) => T & TypedAction<string>> { } export interface TypedActionCreator extends ActionCreator<string, () => TypedAction<string>> { } export interface UserProfileAction { currentUser: UserProfileResource } export interface LoadedUserSettingsAction { userSettings: UserSettingsResource } export interface SetUserSettingsAction { userSettings: UserSettings } export interface ApiErrorAction { apiError: ApiError } export const loadUserSettings: UserSettingsActionCreator<UserProfileAction> = createAction( '[UserSettings] Load UserSettings', props<{ currentUser: UserProfileResource }>() ); export const loadUserSettingsSuccess: UserSettingsActionCreator<LoadedUserSettingsAction> = createAction( '[UserSettings/API] Load UserSettings Success', props<{ userSettings: UserSettingsResource }>() ); export const loadUserSettingsFailure: UserSettingsActionCreator<ApiErrorAction> = createAction( '[UserSettings/API] Load UserSettings Failure', props<ApiErrorAction>() ); export const setUserSettings: UserSettingsActionCreator<SetUserSettingsAction> = createAction( '[UserSettings] Set UserSettings', props<{ userSettings: UserSettings }>() ); export const setUserSettingsSuccess: UserSettingsActionCreator<LoadedUserSettingsAction> = createAction( '[UserSettings/API] Set UserSettings Success', props<{ userSettings: UserSettingsResource }>() ); export const setUserSettingsFailure: UserSettingsActionCreator<ApiErrorAction> = createAction( '[UserSettings/API] Set UserSettings Failure', props<ApiErrorAction>() );