PromucFlow_constructor/app/client/src/layoutSystems/anvil/index.ts

61 lines
1.9 KiB
TypeScript
Raw Normal View History

chore: Create layout system structure for Anvil and AnvilFlexComponent. (#27178) ## Description 1. Add new ```appPositioningType``` : ANVIL. 2. Create new code path and folder structure for Anvil layout system. 3. Move common pieces of functionalities between autoLayout and anvil to anvil folder structure (e.g. ```CanvasResizer```). 4. Create ```AnvilFlexComponent```. 5. Use WDS Flex component in AnvilFlexComponent. 6. Pass min max size props in a data structure that is supported by container queries in the Flex component. e.g. min-width: { base: "120px", "480px": "200px" } 7. Supply the following flex properties (flex-grow flex-shrink flex-basis) to widgets depending on their ```responsiveBehvaiour```: a) Fill: ```flex: 1 1 0%;``` b) Hug: ```flex: 0 0 auto;``` #### PR fixes following issue(s) Fixes # (issue number) 1. [#26987](https://github.com/appsmithorg/appsmith/issues/26987) 2. [#26609](https://github.com/appsmithorg/appsmith/issues/26609) 3. [#26611](https://github.com/appsmithorg/appsmith/issues/26611) #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [x] Manual - [ ] JUnit - [x] Jest - [ ] Cypress ## Checklist: #### Dev activity - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [x] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [ ] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed --------- Co-authored-by: Ashok Kumar M <35134347+marks0351@users.noreply.github.com> Co-authored-by: Aswath K <aswath.sana@gmail.com> Co-authored-by: rahulramesha <rahul@appsmith.com> Co-authored-by: rahulramesha <71900764+rahulramesha@users.noreply.github.com>
2023-10-02 19:41:05 +00:00
import { RenderModes } from "constants/WidgetConstants";
import { AnvilEditorWrapper } from "./editor/AnvilEditorWrapper";
import { AnvilViewerWrapper } from "./viewer/AnvilViewerWrapper";
import type { BaseWidgetProps } from "widgets/BaseWidgetHOC/withBaseWidgetHOC";
import {
getAutoDimensionsConfig,
getAutoLayoutWidgetConfig,
restructureWidgetSizeConfig,
} from "layoutSystems/common/utils/commonUtils";
import type {
AutoDimensionOptions,
AutoDimensionValues,
AutoLayoutConfig,
} from "WidgetProvider/constants";
import { getAnvilComponentDimensions } from "layoutSystems/common/utils/ComponentSizeUtils";
export const getAnvilDimensionsConfig = (
props: BaseWidgetProps,
): {
autoDimension: AutoDimensionOptions | undefined;
widgetSize: { [key: string]: Record<string, string | number> };
} => {
const config: AutoLayoutConfig = getAutoLayoutWidgetConfig(props);
return {
autoDimension: getAutoDimensionsConfig(config, props),
widgetSize: restructureWidgetSizeConfig(config.widgetSize, props),
};
};
/**
* getAnvilSystemPropsEnhancer
*
* utility function to enhance BaseWidgetProps with Anvil specific props
*
*/
const getAnvilSystemPropsEnhancer = (props: BaseWidgetProps) => {
const { autoDimension, widgetSize } = getAnvilDimensionsConfig(props);
const { componentHeight, componentWidth } =
getAnvilComponentDimensions(props);
return {
...props,
componentHeight,
componentWidth,
hasAutoHeight: !!(autoDimension as AutoDimensionValues)?.height,
hasAutoWidth: !!(autoDimension as AutoDimensionValues)?.width,
widgetSize,
};
};
const getAnvilSystemWrapper = (renderMode: RenderModes) => {
if (renderMode === RenderModes.CANVAS) return AnvilEditorWrapper;
return AnvilViewerWrapper;
};
export function getAnvilSystem(renderMode: RenderModes) {
return {
LayoutSystemWrapper: getAnvilSystemWrapper(renderMode),
propertyEnhancer: getAnvilSystemPropsEnhancer,
};
}