PromucFlow_constructor/app/client/src/selectors/actionSelectors.tsx
2022-12-21 22:44:47 +05:30

79 lines
2.1 KiB
TypeScript

import { DataTree } from "entities/DataTree/dataTreeFactory";
import { createSelector } from "reselect";
import WidgetFactory from "utils/WidgetFactory";
import { FlattenedWidgetProps } from "widgets/constants";
import { TJSLibrary } from "workers/common/JSLibrary";
import { getDataTree } from "./dataTreeSelectors";
import {
getExistingPageNames,
selectInstalledLibraries,
} from "./entitiesSelector";
import {
getErrorForApiName,
getErrorForJSObjectName,
getIsSavingForApiName,
getIsSavingForJSObjectName,
} from "./ui";
import { getParentWidget } from "./widgetSelectors";
/**
* Selector to return names that are already taken by other api, js objects, pagenames etc.
*/
export const getUsedActionNames = createSelector(
getExistingPageNames,
getDataTree,
getParentWidget,
selectInstalledLibraries,
(
pageNames: Record<string, any>,
dataTree: DataTree,
parentWidget: FlattenedWidgetProps | undefined,
installedLibraries: TJSLibrary[],
) => {
const map: Record<string, boolean> = {};
// The logic has been copied from Explorer/Entity/Name.tsx Component.
// Todo(abhinav): abstraction leak
if (
parentWidget &&
parentWidget.type === WidgetFactory.widgetTypes.TABS_WIDGET
) {
Object.values(parentWidget.tabsObj).forEach((tab: any) => {
map[tab.label] = true;
});
} else {
pageNames.forEach((pageName: string) => {
map[pageName] = true;
});
Object.keys(dataTree).forEach((treeItem: string) => {
map[treeItem] = true;
});
const libAccessors = ([] as string[]).concat(
...installedLibraries.map((lib) => lib.accessor),
);
for (const accessor of libAccessors) {
map[accessor] = true;
}
}
return map;
},
);
export const getSavingStatusForActionName = createSelector(
getIsSavingForApiName,
getErrorForApiName,
(isSaving: boolean, error: boolean) => ({
isSaving,
error,
}),
);
export const getSavingStatusForJSObjectName = createSelector(
getIsSavingForJSObjectName,
getErrorForJSObjectName,
(isSaving: boolean, error: boolean) => ({
isSaving,
error,
}),
);