## Description We have `Fork` and `Duplicate` options which essentially do the same thing, the former one provides us more flexibility, hence we are removing the `Duplicate` option completely from our app. #### PR fixes following issue(s) Fixes #13169 #### Media #### Type of change - Breaking change (fix or feature that would cause existing functionality to not work as expected) ## Testing > #### How Has This Been Tested? - [x] Cypress - [x] Manual #### 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 - [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 - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Test-plan-implementation#speedbreaker-features-to-consider-for-every-change) have been covered - [x] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans/_edit#areas-of-interest) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [x] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [x] Cypress test cases have been added and approved by SDET/manual QA - [x] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
129 lines
3.9 KiB
TypeScript
129 lines
3.9 KiB
TypeScript
import type {
|
|
ApplicationPayload,
|
|
Page,
|
|
ReduxAction,
|
|
} from "@appsmith/constants/ReduxActionConstants";
|
|
import { ReduxActionTypes } from "@appsmith/constants/ReduxActionConstants";
|
|
import type { UpdatePageResponse } from "api/PageApi";
|
|
import type {
|
|
ApplicationURLParams,
|
|
PageURLParams,
|
|
} from "entities/URLRedirect/URLAssembly";
|
|
import urlBuilder from "entities/URLRedirect/URLAssembly";
|
|
import type { Middleware } from "redux";
|
|
|
|
const routeParamsMiddleware: Middleware =
|
|
() => (next: any) => (action: ReduxAction<any>) => {
|
|
let appParams: ApplicationURLParams = {};
|
|
let pageParams: PageURLParams[] = [];
|
|
switch (action.type) {
|
|
case ReduxActionTypes.IMPORT_APPLICATION_SUCCESS:
|
|
case ReduxActionTypes.IMPORT_TEMPLATE_TO_WORKSPACE_SUCCESS:
|
|
case ReduxActionTypes.FETCH_APPLICATION_SUCCESS: {
|
|
const application: ApplicationPayload = action.payload;
|
|
const { pages } = application;
|
|
appParams = {
|
|
applicationId: application.id,
|
|
applicationSlug: application.slug,
|
|
applicationVersion: application.applicationVersion,
|
|
};
|
|
pageParams = pages.map((page) => ({
|
|
pageSlug: page.slug,
|
|
pageId: page.id,
|
|
customSlug: page.customSlug,
|
|
}));
|
|
break;
|
|
}
|
|
case ReduxActionTypes.FORK_APPLICATION_SUCCESS:
|
|
case ReduxActionTypes.CREATE_APPLICATION_SUCCESS: {
|
|
const application: ApplicationPayload = action.payload.application;
|
|
const { pages } = application;
|
|
appParams = {
|
|
applicationId: application.id,
|
|
applicationSlug: application.slug,
|
|
applicationVersion: application.applicationVersion,
|
|
};
|
|
pageParams = pages.map((page) => ({
|
|
pageSlug: page.slug,
|
|
pageId: page.id,
|
|
customSlug: page.customSlug,
|
|
}));
|
|
break;
|
|
}
|
|
case ReduxActionTypes.CURRENT_APPLICATION_NAME_UPDATE: {
|
|
const application = action.payload;
|
|
appParams = {
|
|
applicationId: application.id,
|
|
applicationSlug: application.slug,
|
|
applicationVersion: application.applicationVersion,
|
|
};
|
|
break;
|
|
}
|
|
case ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS: {
|
|
const pages: Page[] = action.payload.pages;
|
|
pageParams = pages.map((page) => ({
|
|
pageSlug: page.slug,
|
|
pageId: page.pageId,
|
|
customSlug: page.customSlug,
|
|
}));
|
|
break;
|
|
}
|
|
case ReduxActionTypes.UPDATE_PAGE_SUCCESS: {
|
|
const page: UpdatePageResponse = action.payload;
|
|
pageParams = [
|
|
{
|
|
pageSlug: page.slug,
|
|
pageId: page.id,
|
|
customSlug: page.customSlug,
|
|
},
|
|
];
|
|
break;
|
|
}
|
|
case ReduxActionTypes.CREATE_PAGE_SUCCESS: {
|
|
const page: Page = action.payload;
|
|
pageParams = [
|
|
{
|
|
pageSlug: page.slug,
|
|
pageId: page.pageId,
|
|
customSlug: page.customSlug,
|
|
},
|
|
];
|
|
break;
|
|
}
|
|
case ReduxActionTypes.GENERATE_TEMPLATE_PAGE_SUCCESS: {
|
|
const { page } = action.payload;
|
|
urlBuilder.updateURLParams(null, [
|
|
{
|
|
pageSlug: page.slug,
|
|
pageId: page.id,
|
|
customSlug: page.customSlug,
|
|
},
|
|
]);
|
|
break;
|
|
}
|
|
case ReduxActionTypes.UPDATE_APPLICATION_SUCCESS:
|
|
const application = action.payload;
|
|
appParams = {
|
|
applicationId: application.id,
|
|
applicationSlug: application.slug,
|
|
applicationVersion: application.applicationVersion,
|
|
};
|
|
break;
|
|
case ReduxActionTypes.CLONE_PAGE_SUCCESS:
|
|
const { pageId, pageSlug } = action.payload;
|
|
pageParams = [
|
|
{
|
|
pageId,
|
|
pageSlug,
|
|
},
|
|
];
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
urlBuilder.updateURLParams(appParams, pageParams);
|
|
return next(action);
|
|
};
|
|
|
|
export default routeParamsMiddleware;
|