## Description This is the second phase of the split data tree. In the previous version, we collected all config paths in each entity and put them in the `__config__` property. All those config properties do get inserted into final data tree which we don't need at all. As part of this change, we will be creating another tree i.e **'configTree'** which will contain all config of each entity. unEvalTree is split into 2 trees => 1. unEvalTree 2. configTree Example: previous unEvalTree Api1 content <img width="1766" alt="image" src="https://user-images.githubusercontent.com/7846888/215990868-0b095421-e7b8-44bc-89aa-065b35e237d6.png"> After this change unEvalTree Api1 content <img width="1758" alt="image" src="https://user-images.githubusercontent.com/7846888/215991045-506fb10a-645a-4aad-8e77-0f3786a86977.png"> Note- above example doesn't have '__config__' property configTree Api1 content <img width="1760" alt="image" src="https://user-images.githubusercontent.com/7846888/215991169-a2e03443-5d6a-4ff1-97c5-a12593e46395.png"> ## Type of change - Chore (housekeeping or task changes that don't impact user perception) - #11351 ## How Has This Been Tested? - Manual - Jest - Cypress ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] 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 - [ ] 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 - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test Co-authored-by: Aishwarya UR <aishwarya@appsmith.com>
90 lines
2.9 KiB
TypeScript
90 lines
2.9 KiB
TypeScript
import type { DataTree } from "entities/DataTree/dataTreeFactory";
|
|
import { ENTITY_TYPE } from "entities/DataTree/dataTreeFactory";
|
|
import { keyBy } from "lodash";
|
|
import type { JSCollectionData } from "reducers/entityReducers/jsActionsReducer";
|
|
import { jsCollectionIdURL } from "RouteBuilder";
|
|
import type {
|
|
EntityNavigationData,
|
|
NavigationData,
|
|
} from "selectors/navigationSelectors";
|
|
import { createNavData } from "./common";
|
|
import type { JSActionEntity } from "entities/DataTree/types";
|
|
|
|
export const getJsChildrenNavData = (
|
|
jsAction: JSCollectionData,
|
|
pageId: string,
|
|
dataTree: DataTree,
|
|
) => {
|
|
const peekData: Record<string, unknown> = {};
|
|
let childNavData: EntityNavigationData = {};
|
|
|
|
const dataTreeAction = dataTree[jsAction.config.name] as JSActionEntity;
|
|
|
|
if (dataTreeAction) {
|
|
let children: NavigationData[] = jsAction.config.actions.map((jsChild) => {
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
peekData[jsChild.name] = function () {}; // can use new Function to parse string
|
|
|
|
const children: EntityNavigationData = {};
|
|
if (jsAction.data?.[jsChild.id] && jsChild.executeOnLoad) {
|
|
(peekData[jsChild.name] as any).data = jsAction.data[jsChild.id];
|
|
children.data = createNavData({
|
|
id: `${jsAction.config.name}.${jsChild.name}.data`,
|
|
name: `${jsAction.config.name}.${jsChild.name}.data`,
|
|
type: ENTITY_TYPE.JSACTION,
|
|
url: undefined,
|
|
peekable: true,
|
|
peekData: undefined,
|
|
children: {},
|
|
key: jsChild.name + ".data",
|
|
});
|
|
}
|
|
|
|
return createNavData({
|
|
id: `${jsAction.config.name}.${jsChild.name}`,
|
|
name: `${jsAction.config.name}.${jsChild.name}`,
|
|
type: ENTITY_TYPE.JSACTION,
|
|
url: jsCollectionIdURL({
|
|
pageId,
|
|
collectionId: jsAction.config.id,
|
|
functionName: jsChild.name,
|
|
}),
|
|
peekable: true,
|
|
peekData: undefined,
|
|
children,
|
|
key: jsChild.name,
|
|
});
|
|
});
|
|
|
|
const variableChildren: NavigationData[] = jsAction.config.variables.map(
|
|
(jsChild) => {
|
|
if (dataTreeAction)
|
|
peekData[jsChild.name] = dataTreeAction[jsChild.name];
|
|
return createNavData({
|
|
id: `${jsAction.config.name}.${jsChild.name}`,
|
|
name: `${jsAction.config.name}.${jsChild.name}`,
|
|
type: ENTITY_TYPE.JSACTION,
|
|
url: jsCollectionIdURL({
|
|
pageId,
|
|
collectionId: jsAction.config.id,
|
|
functionName: jsChild.name,
|
|
}),
|
|
peekable: true,
|
|
peekData: undefined,
|
|
children: {},
|
|
key: jsChild.name,
|
|
});
|
|
},
|
|
);
|
|
|
|
children = children.concat(variableChildren);
|
|
|
|
childNavData = keyBy(children, (data) => data.key) as Record<
|
|
string,
|
|
NavigationData
|
|
>;
|
|
|
|
return { childNavData, peekData };
|
|
}
|
|
};
|