PromucFlow_constructor/app/client/src/reducers/entityReducers/widgetConfigReducer.tsx
2022-08-04 11:10:44 +05:30

53 lines
1.3 KiB
TypeScript

import { createImmerReducer } from "utils/ReducerUtils";
import {
ReduxActionTypes,
ReduxAction,
} from "@appsmith/constants/ReduxActionConstants";
import { WidgetProps } from "widgets/BaseWidget";
const initialState: WidgetConfigReducerState = { config: {} };
export type WidgetBlueprint = {
view?: Array<{
type: string;
size?: { rows: number; cols: number };
position: { top?: number; left?: number };
props: Record<string, any>;
}>;
operations?: any;
};
export interface WidgetConfigProps {
rows: number;
columns: number;
blueprint?: WidgetBlueprint;
widgetName: string;
enhancements?: Record<string, unknown>; // TODO(abhinav): SPECIFY TYPES
}
export interface WidgetConfig
extends Partial<WidgetProps>,
Omit<WidgetConfigProps, "widgetName"> {
type: string;
hideCard: boolean;
displayName: string;
key: string;
isCanvas?: boolean;
needsMeta?: boolean;
}
export interface WidgetConfigReducerState {
config: Record<string, WidgetConfig>;
}
const widgetConfigReducer = createImmerReducer(initialState, {
[ReduxActionTypes.ADD_WIDGET_CONFIG]: (
state: WidgetConfigReducerState,
action: ReduxAction<WidgetConfig>,
) => {
state.config[action.payload.type] = action.payload;
},
});
export default widgetConfigReducer;