diff --git a/src/components/forms/sponsor-general-form/index.js b/src/components/forms/sponsor-general-form/index.js
deleted file mode 100644
index 781a8395f..000000000
--- a/src/components/forms/sponsor-general-form/index.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright 2025 OpenStack Foundation
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * */
-
-import React from "react";
-import { Box } from "@mui/material";
-import SponsorHeader from "./sponsor-header";
-import Sponsorship from "./sponsorship";
-import BadgeScanSettings from "./badge-scan-settings";
-import SponsorExtraQuestions from "./extra-questions";
-
-const SponsorGeneralForm = ({
- sponsor,
- member,
- summit,
- onSponsorshipPaginate,
- onSponsorshipAdd,
- onSponsorshipDelete,
- getSponsorshipAddons,
- onSponsorshipSelect,
- onSponsorshipAddonSave,
- onSponsorshipAddonRemove,
- getSponsorLeadReportSettingsMeta,
- upsertSponsorLeadReportSettings,
- getSponsorExtraQuestion,
- saveSponsorExtraQuestion,
- saveSponsorExtraQuestionValue,
- resetSponsorExtraQuestionForm,
- onExtraQuestionDelete,
- onExtraQuestionReOrder
-}) => (
-
-
-
-
-
-
-);
-
-export default SponsorGeneralForm;
diff --git a/src/layouts/sponsor-id-layout.js b/src/layouts/sponsor-id-layout.js
index d39a3d32c..e454c02bd 100644
--- a/src/layouts/sponsor-id-layout.js
+++ b/src/layouts/sponsor-id-layout.js
@@ -3,7 +3,7 @@ import { connect } from "react-redux";
import T from "i18n-react/dist/i18n-react";
import { Breadcrumb } from "react-breadcrumbs";
import { Switch, Route } from "react-router-dom";
-import EditSponsorPage from "../pages/sponsors/edit-sponsor-page";
+import SponsorPage from "../pages/sponsors/sponsor-page";
import { getSponsor, resetSponsorForm } from "../actions/sponsor-actions";
import EditAdSponsorPage from "../pages/sponsors/edit-advertisement-sponsor-page";
import EditMaterialSponsorPage from "../pages/sponsors/edit-material-sponsor-page";
@@ -141,23 +141,7 @@ class SponsorIdLayout extends React.Component {
)}
/>
-
-
- (
-
-
-
-
- )}
- />
-
+
diff --git a/src/pages/sponsors/__tests__/edit-sponsor-page.test.js b/src/pages/sponsors/__tests__/edit-sponsor-page.test.js
index 13845645d..46b02c4e3 100644
--- a/src/pages/sponsors/__tests__/edit-sponsor-page.test.js
+++ b/src/pages/sponsors/__tests__/edit-sponsor-page.test.js
@@ -1,20 +1,19 @@
import React from "react";
import userEvent from "@testing-library/user-event";
import { act, screen } from "@testing-library/react";
-import EditSponsorPage, {
- getFragmentFromValue,
- getTabFromFragment
-} from "../edit-sponsor-page";
+import { Router, Route } from "react-router-dom";
+import { createMemoryHistory } from "history";
+import SponsorPage from "../sponsor-page";
import { renderWithRedux } from "../../../utils/test-utils";
import { DEFAULT_STATE as currentSponsorDefaultState } from "../../../reducers/sponsors/sponsor-reducer";
-import { DEFAULT_STATE as currentSponsorFormsDefaultState } from "../../../reducers/sponsors/sponsor-page-forms-list-reducer";
+import { DEFAULT_STATE as sponsorPageFormsListDefaultState } from "../../../reducers/sponsors/sponsor-page-forms-list-reducer";
import {
DEFAULT_ENTITY as defaultSummitEntity,
DEFAULT_STATE as currentSummitDefaultState
} from "../../../reducers/summits/current-summit-reducer";
jest.mock(
- "../sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js"
+ "../sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js"
);
jest.mock("../sponsor-users-list-per-sponsor/index.js");
@@ -29,190 +28,73 @@ jest.mock("../../../actions/sponsor-actions", () => ({
resetSponsorForm: jest.fn(() => ({ type: "MOCK_ACTION" }))
}));
-describe("EditSponsorPage", () => {
- describe("getFragmentFromValue", () => {
- it("returns correct values", () => {
- const result1 = getFragmentFromValue(0);
- expect(result1).toBe("general");
-
- const result2 = getFragmentFromValue(2);
- expect(result2).toBe("pages");
-
- const result3 = getFragmentFromValue(3);
- expect(result3).toBe("media_uploads");
-
- const result4 = getFragmentFromValue(7);
- expect(result4).toBe("badge_scans");
- });
- });
-
- describe("getTabFromFragment", () => {
- it("returns correct values for defined fragments", () => {
- expect(getTabFromFragment({ hash: "#general" })).toBe(0);
- expect(getTabFromFragment({ hash: "#users" })).toBe(1);
- expect(getTabFromFragment({ hash: "#pages" })).toBe(2);
- expect(getTabFromFragment({ hash: "#media_uploads" })).toBe(3);
- expect(getTabFromFragment({ hash: "#forms" })).toBe(4);
- expect(getTabFromFragment({ hash: "#badge_scans" })).toBe(7);
- });
- });
-
+const SPONSOR_ROUTE = "/app/summits/:summit_id/sponsors/:sponsor_id";
+
+const baseState = {
+ currentSummitState: {
+ ...currentSummitDefaultState,
+ currentSummit: { ...defaultSummitEntity, id: 12 }
+ },
+ loggedUserState: {
+ member: { groups: {} }
+ },
+ currentSummitSponsorshipListState: {
+ sponsorships: [],
+ currentPage: 1,
+ lastPage: 1,
+ perPage: 100,
+ order: "order",
+ orderDir: 1,
+ totalSponsorships: 0
+ },
+ currentSponsorState: {
+ ...currentSponsorDefaultState,
+ entity: { ...currentSponsorDefaultState.entity, id: 123 }
+ },
+ sponsorPageFormsListState: sponsorPageFormsListDefaultState
+};
+
+const renderSponsorPage = (url, state = baseState) => {
+ const history = createMemoryHistory({ initialEntries: [url] });
+ return {
+ history,
+ ...renderWithRedux(
+
+
+ ,
+ { initialState: state }
+ )
+ };
+};
+
+describe("SponsorPage", () => {
describe("Component", () => {
- it("should change the url fragment on tab click (same path)", async () => {
- const mockHistory = { push: jest.fn(), replace: jest.fn() };
-
- renderWithRedux(
- ,
- {
- initialState: {
- currentSummitState: {
- ...currentSummitDefaultState,
- currentSummit: { ...defaultSummitEntity, id: 12 }
- },
- loggedUserState: {
- member: {
- groups: {}
- }
- },
- currentSummitSponsorshipListState: {
- sponsorships: [],
- currentPage: 1,
- lastPage: 1,
- perPage: 100,
- order: "order",
- orderDir: 1,
- totalSponsorships: 0
- },
- currentSponsorState: {
- ...currentSponsorDefaultState,
- entity: { ...currentSponsorDefaultState.entity, id: 123 }
- },
- sponsorPageFormsListState: {
- ...currentSponsorFormsDefaultState
- }
- }
- }
- );
-
- const usersTabReference = screen.getByText("edit_sponsor.tab.forms");
+ it("renders the tab nav at the base sponsor URL", () => {
+ renderSponsorPage("/app/summits/12/sponsors/123");
- await act(async () => {
- await userEvent.click(usersTabReference);
- });
-
- expect(mockHistory.replace).toHaveBeenCalledWith(
- expect.objectContaining({
- hash: "#forms"
- })
- );
- expect(mockHistory.push).not.toHaveBeenCalled();
+ expect(screen.getByText("edit_sponsor.tab.general")).toBeInTheDocument();
+ expect(screen.getByText("edit_sponsor.tab.forms")).toBeInTheDocument();
});
- it("should call history.push on tab click when on nested route", async () => {
- const mockHistory = { push: jest.fn(), replace: jest.fn() };
-
- renderWithRedux(
- ,
- {
- initialState: {
- currentSummitState: {
- ...currentSummitDefaultState,
- currentSummit: { ...defaultSummitEntity, id: 12 }
- },
- loggedUserState: {
- member: { groups: {} }
- },
- currentSummitSponsorshipListState: {
- sponsorships: [],
- currentPage: 1,
- lastPage: 1,
- perPage: 100,
- order: "order",
- orderDir: 1,
- totalSponsorships: 0
- },
- currentSponsorState: {
- ...currentSponsorDefaultState,
- entity: { ...currentSponsorDefaultState.entity, id: 44 }
- }
- }
- }
- );
+ it("navigates to the correct URL when a tab is clicked", async () => {
+ const { history } = renderSponsorPage("/app/summits/12/sponsors/123");
- const usersTab = screen.getByText("edit_sponsor.tab.users");
+ const formsTab = screen.getByText("edit_sponsor.tab.forms");
await act(async () => {
- await userEvent.click(usersTab);
+ await userEvent.click(formsTab);
});
- expect(mockHistory.push).toHaveBeenCalledWith(
- "/app/summits/12/sponsors/44#users"
+ expect(history.location.pathname).toBe(
+ "/app/summits/12/sponsors/123/forms"
);
});
- it("should change the tab rendered on fragment change", () => {
- const { rerender } = renderWithRedux(
- ,
- {
- initialState: {
- currentSummitState: {
- currentSummit: defaultSummitEntity,
- ...currentSummitDefaultState
- },
- loggedUserState: {
- member: {
- groups: {}
- }
- },
- currentSummitSponsorshipListState: {
- sponsorships: [],
- currentPage: 1,
- lastPage: 1,
- perPage: 100,
- order: "order",
- orderDir: 1,
- totalSponsorships: 0
- },
- currentSponsorState: {
- sponsorships: [],
- ...currentSponsorDefaultState
- }
- }
- }
- );
-
- const generalTabPanel = screen.getByTestId("simple-tabpanel-0");
- expect(generalTabPanel).toBeDefined();
+ it("selects the correct tab based on URL path", () => {
+ renderSponsorPage("/app/summits/12/sponsors/123/users");
- rerender(
-
- );
-
- const usersTabPanel = screen.getByTestId("simple-tabpanel-1");
- expect(usersTabPanel).toBeDefined();
+ const usersTab = screen.getByText("edit_sponsor.tab.users");
+ expect(usersTab.closest("[aria-selected='true']")).toBeTruthy();
});
});
});
diff --git a/src/pages/sponsors/edit-sponsor-page.js b/src/pages/sponsors/edit-sponsor-page.js
deleted file mode 100644
index 31a549070..000000000
--- a/src/pages/sponsors/edit-sponsor-page.js
+++ /dev/null
@@ -1,378 +0,0 @@
-/**
- * Copyright 2018 OpenStack Foundation
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * */
-
-import React, { useState, useEffect } from "react";
-import { connect } from "react-redux";
-import T from "i18n-react/dist/i18n-react";
-import { Box, Container, Tab, Tabs, Typography } from "@mui/material";
-import {
- saveSponsor,
- resetSponsorForm,
- getSponsorAdvertisements,
- getSponsorMaterials,
- getSponsorSocialNetworks,
- getSponsorLeadReportSettingsMeta,
- getSponsorTiers,
- addTierToSponsor,
- removeTierFromSponsor,
- getSponsorshipAddons,
- saveAddonsToSponsorship,
- removeAddonToSponsorship,
- setSelectedSponsorship,
- upsertSponsorLeadReportSettings,
- getSponsorExtraQuestion,
- saveSponsorExtraQuestion,
- saveSponsorExtraQuestionValue,
- resetSponsorExtraQuestionForm,
- deleteExtraQuestion,
- updateExtraQuestionOrder,
- getExtraQuestionMeta
-} from "../../actions/sponsor-actions";
-import { getSponsorPurchasesMeta } from "../../actions/sponsor-settings-actions";
-import SponsorGeneralForm from "../../components/forms/sponsor-general-form/index";
-import SponsorUsersListPerSponsorPage from "./sponsor-users-list-per-sponsor";
-import SponsorFormsTab from "./sponsor-forms-tab";
-import SponsorBadgeScans from "./sponsor-badge-scans";
-import SponsorCartTab from "./sponsor-cart-tab";
-import SponsorPagesTab from "./sponsor-pages-tab";
-import SponsorFormsManageItems from "./sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items";
-import { SPONSOR_TABS, ACCESS_ROUTES } from "../../utils/constants";
-import SponsorPurchasesTab from "./sponsor-purchases-tab";
-import SponsorMediaUploadTab from "./sponsor-media-upload-tab";
-import Member from "../../models/member";
-
-export const tabsToFragmentMap = [
- "general",
- "users",
- "pages",
- "media_uploads",
- "forms",
- "cart",
- "purchases",
- "badge_scans"
-];
-
-export const getFragmentFromValue = (index) => tabsToFragmentMap[index];
-
-export const getTabFromFragment = (location) => {
- const currentHash = (location.hash || "").replace("#", "");
- const result = tabsToFragmentMap.indexOf(currentHash);
- if (result > -1) return result;
- return 0;
-};
-
-export const CustomTabPanel = (props) => {
- const { children, value, index, ...other } = props;
-
- return (
-
- {value === index && {children}}
-
- );
-};
-
-const a11yProps = (index) => ({
- id: `simple-tab-${index}`,
- "aria-controls": `simple-tabpanel-${index}`
-});
-
-const EditSponsorPage = (props) => {
- const {
- entity,
- member,
- history,
- location,
- match,
- currentSummit,
- resetSponsorForm,
- getSponsorAdvertisements,
- getSponsorMaterials,
- getSponsorSocialNetworks,
- getSponsorLeadReportSettingsMeta,
- getSponsorTiers,
- addTierToSponsor,
- removeTierFromSponsor,
- getSponsorshipAddons,
- saveAddonsToSponsorship,
- removeAddonToSponsorship,
- setSelectedSponsorship,
- upsertSponsorLeadReportSettings,
- getSponsorExtraQuestion,
- saveSponsorExtraQuestion,
- saveSponsorExtraQuestionValue,
- resetSponsorExtraQuestionForm,
- deleteExtraQuestion,
- updateExtraQuestionOrder,
- getExtraQuestionMeta,
- getSponsorPurchasesMeta
- } = props;
-
- const [selectedTab, setSelectedTab] = useState(getTabFromFragment(location));
-
- const memberObj = new Member(member);
- const isNestedFormItemRoute = !!match.params?.form_id;
-
- const handleTabChange = (event, newValue) => {
- setSelectedTab(newValue);
- const fragment = getFragmentFromValue(newValue);
- if (isNestedFormItemRoute) {
- history.push(
- `/app/summits/${currentSummit.id}/sponsors/${entity.id}#${fragment}`
- );
- } else {
- history.replace({ ...location, hash: `#${fragment}` });
- }
- };
-
- useEffect(() => {
- setSelectedTab(getTabFromFragment(location));
- }, [location.hash]);
-
- useEffect(() => {
- if (!location.hash) {
- const defaultTab = isNestedFormItemRoute
- ? SPONSOR_TABS.FORMS
- : SPONSOR_TABS.GENERAL;
- history.replace({
- ...location,
- hash: `#${getFragmentFromValue(defaultTab)}`
- });
- }
- }, []);
-
- useEffect(() => {
- if (entity.id > 0) {
- getSponsorAdvertisements(entity.id);
- getSponsorMaterials(entity.id);
- getSponsorSocialNetworks(entity.id);
- getSponsorLeadReportSettingsMeta(entity.id);
- getSponsorTiers(entity.id);
- getExtraQuestionMeta();
- getSponsorPurchasesMeta();
- } else {
- resetSponsorForm();
- }
- }, [entity.id]);
-
- const handleSponsorshipPaginate = (page, perPage, order, orderDir) => {
- getSponsorTiers(entity.id, page, perPage, order, orderDir);
- };
-
- const tabs = [
- {
- label: T.translate("edit_sponsor.tab.general"),
- value: SPONSOR_TABS.GENERAL,
- accessRoute: ACCESS_ROUTES.SPONSORS
- },
- {
- label: T.translate("edit_sponsor.tab.users"),
- value: SPONSOR_TABS.USERS,
- accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
- },
- {
- label: T.translate("edit_sponsor.tab.pages"),
- value: SPONSOR_TABS.PAGES,
- accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
- },
- {
- label: T.translate("edit_sponsor.tab.media_uploads"),
- value: SPONSOR_TABS.MEDIA_UPLOADS,
- accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
- },
- {
- label: T.translate("edit_sponsor.tab.forms"),
- value: SPONSOR_TABS.FORMS,
- accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
- },
- {
- label: T.translate("edit_sponsor.tab.cart"),
- value: SPONSOR_TABS.CART,
- accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
- },
- {
- label: T.translate("edit_sponsor.tab.purchases"),
- value: SPONSOR_TABS.PURCHASES,
- accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
- },
- {
- label: T.translate("edit_sponsor.tab.badge_scans"),
- value: SPONSOR_TABS.BADGE_SCANS,
- accessRoute: ACCESS_ROUTES.SPONSORS
- }
- ];
-
- const drawTab = (tab) => {
- if (!memberObj.hasAccess(tab.accessRoute)) return null;
- return (
-
- );
- };
-
- return (
-
-
-
- {entity.company?.name}
-
-
-
- {tabs.map(drawTab)}
-
-
- {memberObj.hasAccess(ACCESS_ROUTES.SPONSORS) && (
-
-
-
- )}
- {memberObj.hasAccess(ACCESS_ROUTES.ADMIN_SPONSORS) && (
-
-
-
- )}
- {memberObj.hasAccess(ACCESS_ROUTES.ADMIN_SPONSORS) && (
-
-
-
- )}
- {memberObj.hasAccess(ACCESS_ROUTES.ADMIN_SPONSORS) && (
-
-
-
- )}
- {memberObj.hasAccess(ACCESS_ROUTES.ADMIN_SPONSORS) && (
-
- {isNestedFormItemRoute ? (
-
- ) : (
-
- )}
-
- )}
- {memberObj.hasAccess(ACCESS_ROUTES.ADMIN_SPONSORS) && (
-
-
-
- )}
- {memberObj.hasAccess(ACCESS_ROUTES.ADMIN_SPONSORS) && (
-
-
-
- )}
- {memberObj.hasAccess(ACCESS_ROUTES.SPONSORS) && (
-
-
-
- )}
-
-
- );
-};
-
-const mapStateToProps = ({
- loggedUserState,
- currentSummitState,
- currentSponsorState,
- currentSummitSponsorshipListState
-}) => ({
- currentSummit: currentSummitState.currentSummit,
- sponsorships: currentSummitSponsorshipListState.sponsorships,
- member: loggedUserState.member,
- ...currentSponsorState
-});
-
-export default connect(mapStateToProps, {
- saveSponsor,
- resetSponsorForm,
- getSponsorAdvertisements,
- getSponsorMaterials,
- getSponsorSocialNetworks,
- getSponsorLeadReportSettingsMeta,
- getSponsorTiers,
- addTierToSponsor,
- removeTierFromSponsor,
- getSponsorshipAddons,
- saveAddonsToSponsorship,
- removeAddonToSponsorship,
- setSelectedSponsorship,
- upsertSponsorLeadReportSettings,
- getSponsorExtraQuestion,
- saveSponsorExtraQuestion,
- saveSponsorExtraQuestionValue,
- resetSponsorExtraQuestionForm,
- deleteExtraQuestion,
- updateExtraQuestionOrder,
- getExtraQuestionMeta,
- getSponsorPurchasesMeta
-})(EditSponsorPage);
diff --git a/src/pages/sponsors/sponsor-page/components/tab-nav.js b/src/pages/sponsors/sponsor-page/components/tab-nav.js
new file mode 100644
index 000000000..94d54b47f
--- /dev/null
+++ b/src/pages/sponsors/sponsor-page/components/tab-nav.js
@@ -0,0 +1,69 @@
+import React from "react";
+import { connect } from "react-redux";
+import T from "i18n-react/dist/i18n-react";
+import { Tab, Tabs } from "@mui/material";
+import { matchPath } from "react-router-dom";
+import Member from "../../../../models/member";
+import { SPONSOR_PAGE_TABS } from "../tabDefs";
+
+const TabNav = ({ currentSummit, sponsor, member, history, location }) => {
+ const memberObj = new Member(member);
+
+ const tabs = SPONSOR_PAGE_TABS.map((t) => ({
+ ...t,
+ label: T.translate(t.labelKey),
+ value: t.path.slice(1) || "general"
+ }));
+
+ const routeMatch = matchPath(location.pathname, {
+ path: "/app/summits/:summitId/sponsors/:sponsorId/:tab"
+ });
+ const selectedTab = routeMatch?.params?.tab || tabs[0].value;
+
+ const handleTabChange = (value) => {
+ const tab = tabs.find((t) => t.value === value);
+ history.push(
+ `/app/summits/${currentSummit.id}/sponsors/${sponsor.id}${tab.path}`
+ );
+ };
+
+ return (
+ handleTabChange(val)}
+ sx={{ minHeight: "36px" }}
+ >
+ {tabs
+ .filter((t) => memberObj.hasAccess(t.accessRoute))
+ .map((tab) => (
+
+ ))}
+
+ );
+};
+
+const mapStateToProps = ({
+ loggedUserState,
+ currentSummitState,
+ currentSponsorState
+}) => ({
+ currentSummit: currentSummitState.currentSummit,
+ member: loggedUserState.member,
+ sponsor: currentSponsorState.entity
+});
+
+export default connect(mapStateToProps, {})(TabNav);
diff --git a/src/pages/sponsors/sponsor-page/index.js b/src/pages/sponsors/sponsor-page/index.js
new file mode 100644
index 000000000..ea3c6f03e
--- /dev/null
+++ b/src/pages/sponsors/sponsor-page/index.js
@@ -0,0 +1,109 @@
+/**
+ * Copyright 2018 OpenStack Foundation
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * */
+
+import React, { useEffect } from "react";
+import { connect } from "react-redux";
+import { Box, Container, Typography } from "@mui/material";
+import { Redirect, Route, Switch } from "react-router-dom";
+import {
+ getExtraQuestionMeta,
+ getSponsorAdvertisements,
+ getSponsorLeadReportSettingsMeta,
+ getSponsorMaterials,
+ getSponsorSocialNetworks,
+ getSponsorTiers,
+ resetSponsorForm
+} from "../../../actions/sponsor-actions";
+import { getSponsorPurchasesMeta } from "../../../actions/sponsor-settings-actions";
+import TabNav from "./components/tab-nav";
+import { SPONSOR_PAGE_TABS } from "./tabDefs";
+
+const SponsorPage = ({
+ entity,
+ history,
+ location,
+ match,
+ currentSummit,
+ resetSponsorForm,
+ getSponsorAdvertisements,
+ getSponsorMaterials,
+ getSponsorSocialNetworks,
+ getSponsorLeadReportSettingsMeta,
+ getSponsorTiers,
+ getExtraQuestionMeta,
+ getSponsorPurchasesMeta
+}) => {
+ useEffect(() => {
+ if (entity.id > 0) {
+ getSponsorAdvertisements(entity.id);
+ getSponsorMaterials(entity.id);
+ getSponsorSocialNetworks(entity.id);
+ getSponsorLeadReportSettingsMeta(entity.id);
+ getSponsorTiers(entity.id);
+ getExtraQuestionMeta();
+ getSponsorPurchasesMeta();
+ } else {
+ resetSponsorForm();
+ }
+ }, [entity.id]);
+
+ return (
+
+
+
+ {entity.company?.name}
+
+
+
+
+
+ {SPONSOR_PAGE_TABS.map(
+ ({ path, exact, strict, component: Component }) => (
+
+ )
+ )}
+
+
+
+
+ );
+};
+
+const mapStateToProps = ({
+ currentSummitState,
+ currentSponsorState,
+ currentSummitSponsorshipListState
+}) => ({
+ currentSummit: currentSummitState.currentSummit,
+ sponsorships: currentSummitSponsorshipListState.sponsorships,
+ ...currentSponsorState
+});
+
+export default connect(mapStateToProps, {
+ resetSponsorForm,
+ getSponsorAdvertisements,
+ getSponsorMaterials,
+ getSponsorSocialNetworks,
+ getSponsorLeadReportSettingsMeta,
+ getSponsorTiers,
+ getExtraQuestionMeta,
+ getSponsorPurchasesMeta
+})(SponsorPage);
diff --git a/src/pages/sponsors/sponsor-page/tabDefs.js b/src/pages/sponsors/sponsor-page/tabDefs.js
new file mode 100644
index 000000000..083a3048f
--- /dev/null
+++ b/src/pages/sponsors/sponsor-page/tabDefs.js
@@ -0,0 +1,95 @@
+import React from "react";
+import { Route, Switch } from "react-router-dom";
+import { Breadcrumb } from "react-breadcrumbs";
+import { ACCESS_ROUTES } from "../../../utils/constants";
+import Restrict from "../../../routes/restrict";
+import SponsorGeneralForm from "./tabs/sponsor-general-form";
+import SponsorUsersListPerSponsorPage from "../sponsor-users-list-per-sponsor";
+import SponsorPagesTab from "./tabs/sponsor-pages-tab";
+import SponsorMediaUploadTab from "./tabs/sponsor-media-upload-tab";
+import SponsorFormsTab from "./tabs/sponsor-forms-tab";
+import SponsorFormsManageItems from "./tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items";
+import SponsorCartTab from "./tabs/sponsor-cart-tab";
+import SponsorPurchasesTab from "./tabs/sponsor-purchases-tab";
+import SponsorBadgeScans from "./tabs/sponsor-badge-scans";
+
+const SponsorFormsRoute = ({ match }) => (
+
+
+
+
+
+
+
+);
+
+export const SPONSOR_PAGE_TABS = [
+ {
+ labelKey: "edit_sponsor.tab.general",
+ path: "",
+ exact: true,
+ strict: true,
+ component: SponsorGeneralForm,
+ accessRoute: ACCESS_ROUTES.SPONSORS
+ },
+ {
+ labelKey: "edit_sponsor.tab.users",
+ path: "/users",
+ exact: true,
+ component: SponsorUsersListPerSponsorPage,
+ accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
+ },
+ {
+ labelKey: "edit_sponsor.tab.pages",
+ path: "/pages",
+ exact: true,
+ component: SponsorPagesTab,
+ accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
+ },
+ {
+ labelKey: "edit_sponsor.tab.media_uploads",
+ path: "/media-uploads",
+ exact: true,
+ component: SponsorMediaUploadTab,
+ accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
+ },
+ {
+ labelKey: "edit_sponsor.tab.forms",
+ path: "/forms",
+ component: SponsorFormsRoute,
+ accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
+ },
+ {
+ labelKey: "edit_sponsor.tab.cart",
+ path: "/cart",
+ exact: true,
+ component: SponsorCartTab,
+ accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
+ },
+ {
+ labelKey: "edit_sponsor.tab.purchases",
+ path: "/purchases",
+ exact: true,
+ component: SponsorPurchasesTab,
+ accessRoute: ACCESS_ROUTES.ADMIN_SPONSORS
+ },
+ {
+ labelKey: "edit_sponsor.tab.badge_scans",
+ path: "/badge-scans",
+ exact: true,
+ component: SponsorBadgeScans,
+ accessRoute: ACCESS_ROUTES.SPONSORS
+ }
+].map((tab) => ({
+ ...tab,
+ component: Restrict(tab.component, tab.accessRoute)
+}));
diff --git a/src/pages/sponsors/sponsor-badge-scans/edit-badge-scan-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/edit-badge-scan-popup.js
similarity index 96%
rename from src/pages/sponsors/sponsor-badge-scans/edit-badge-scan-popup.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/edit-badge-scan-popup.js
index 2bb8e5f0a..b56dbcf2b 100644
--- a/src/pages/sponsors/sponsor-badge-scans/edit-badge-scan-popup.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/edit-badge-scan-popup.js
@@ -19,9 +19,9 @@ import {
import CloseIcon from "@mui/icons-material/Close";
import ExtraQuestionsMUI from "openstack-uicore-foundation/lib/components/extra-questions-mui";
-import useScrollToError from "../../../hooks/useScrollToError";
-import MuiFormikTextField from "../../../components/mui/formik-inputs/mui-formik-textfield";
-import { getTypeValue, toSlug } from "../../../utils/extra-questions";
+import useScrollToError from "../../../../../hooks/useScrollToError";
+import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield";
+import { getTypeValue, toSlug } from "../../../../../utils/extra-questions";
const formatExtraQuestions = (extraQuestions, sponsorQuestions) => {
const values = {};
diff --git a/src/pages/sponsors/sponsor-badge-scans/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/index.js
similarity index 94%
rename from src/pages/sponsors/sponsor-badge-scans/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/index.js
index 1853aac2d..e998d27f1 100644
--- a/src/pages/sponsors/sponsor-badge-scans/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-badge-scans/index.js
@@ -18,14 +18,14 @@ import { Box, Button, Grid2, TextField } from "@mui/material";
import SearchIcon from "@mui/icons-material/Search";
import AddIcon from "@mui/icons-material/Add";
import DownloadIcon from "@mui/icons-material/Download";
-import MuiTable from "../../../components/mui/table/mui-table";
+import MuiTable from "../../../../../components/mui/table/mui-table";
import {
getBadgeScans,
exportBadgeScans,
getBadgeScan,
saveBadgeScan
-} from "../../../actions/sponsor-actions";
-import { DEFAULT_CURRENT_PAGE } from "../../../utils/constants";
+} from "../../../../../actions/sponsor-actions";
+import { DEFAULT_CURRENT_PAGE } from "../../../../../utils/constants";
import EditBadgeScanPopup from "./edit-badge-scan-popup";
const SponsorBadgeScans = ({
@@ -237,9 +237,14 @@ const SponsorBadgeScans = ({
);
};
-const mapStateToProps = ({ badgeScansListState, currentBadgeScanState }) => ({
+const mapStateToProps = ({
+ badgeScansListState,
+ currentBadgeScanState,
+ currentSponsorState
+}) => ({
...badgeScansListState,
- currentBadgeScan: currentBadgeScanState.entity
+ currentBadgeScan: currentBadgeScanState.entity,
+ sponsor: currentSponsorState.entity
});
export default connect(mapStateToProps, {
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/cart-note/__tests__/cart-note.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-note/__tests__/cart-note.test.js
similarity index 99%
rename from src/pages/sponsors/sponsor-cart-tab/components/cart-note/__tests__/cart-note.test.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-note/__tests__/cart-note.test.js
index 23bfc93b3..e8be8d3db 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/cart-note/__tests__/cart-note.test.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-note/__tests__/cart-note.test.js
@@ -15,7 +15,7 @@ jest.mock("openstack-uicore-foundation/lib/utils/methods", () => ({
// Mock confirm dialog
const mockShowConfirmDialog = jest.fn();
-jest.mock("../../../../../../components/mui/showConfirmDialog", () => ({
+jest.mock("../../../../../../../../components/mui/showConfirmDialog", () => ({
__esModule: true,
default: (...args) => mockShowConfirmDialog(...args)
}));
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/cart-note/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-note/index.js
similarity index 98%
rename from src/pages/sponsors/sponsor-cart-tab/components/cart-note/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-note/index.js
index f67cd6bbc..3333a5c1d 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/cart-note/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-note/index.js
@@ -13,7 +13,7 @@ import {
import EditIcon from "@mui/icons-material/Edit";
import DeleteIcon from "@mui/icons-material/Delete";
import PropTypes from "prop-types";
-import showConfirmDialog from "../../../../../components/mui/showConfirmDialog";
+import showConfirmDialog from "../../../../../../../components/mui/showConfirmDialog";
const CartNote = ({
title,
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/cart-view.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-view.js
similarity index 95%
rename from src/pages/sponsors/sponsor-cart-tab/components/cart-view.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-view.js
index 272eba524..d299ed8ad 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/cart-view.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-view.js
@@ -25,9 +25,9 @@ import {
import AddIcon from "@mui/icons-material/Add";
import LockOpenIcon from "@mui/icons-material/LockOpen";
import LockClosedIcon from "@mui/icons-material/Lock";
-import MuiTable from "../../../../components/mui/table/mui-table";
-import { TotalRow } from "../../../../components/mui/table/extra-rows";
-import SearchInput from "../../../../components/mui/search-input";
+import MuiTable from "../../../../../../components/mui/table/mui-table";
+import { TotalRow } from "../../../../../../components/mui/table/extra-rows";
+import SearchInput from "../../../../../../components/mui/search-input";
import {
deleteSponsorCartForm,
getSponsorCart,
@@ -35,9 +35,9 @@ import {
unlockSponsorCartForm,
saveSponsorCartNote,
deleteSponsorCartNote
-} from "../../../../actions/sponsor-cart-actions";
+} from "../../../../../../actions/sponsor-cart-actions";
import CartNote from "./cart-note";
-import { SPONSOR_CART_NOTE_TYPES } from "../../../../utils/constants";
+import { SPONSOR_CART_NOTE_TYPES } from "../../../../../../utils/constants";
const CartView = ({
cart,
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/__tests__/edit-cart-form.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/__tests__/edit-cart-form.test.js
similarity index 96%
rename from src/pages/sponsors/sponsor-cart-tab/components/edit-form/__tests__/edit-cart-form.test.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/__tests__/edit-cart-form.test.js
index 83cc17401..46bc01308 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/__tests__/edit-cart-form.test.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/__tests__/edit-cart-form.test.js
@@ -10,14 +10,14 @@ jest.mock("i18n-react/dist/i18n-react", () => ({
const mockGetSponsorCartForm = jest.fn(() => () => Promise.resolve());
const mockUpdateCartForm = jest.fn(() => () => Promise.resolve());
-jest.mock("../../../../../../actions/sponsor-cart-actions", () => ({
+jest.mock("../../../../../../../../actions/sponsor-cart-actions", () => ({
getSponsorCartForm: (...args) => mockGetSponsorCartForm(...args),
updateCartForm: (...args) => mockUpdateCartForm(...args)
}));
// Mock sub-components used by FormItemTable
jest.mock(
- "../../../../../../components/mui/FormItemTable/components/GlobalQuantityField",
+ "../../../../../../../../components/mui/FormItemTable/components/GlobalQuantityField",
() => {
const React = require("react");
return {
@@ -30,7 +30,7 @@ jest.mock(
);
jest.mock(
- "../../../../../../components/mui/FormItemTable/components/ItemTableField",
+ "../../../../../../../../components/mui/FormItemTable/components/ItemTableField",
() => {
const React = require("react");
return {
@@ -43,7 +43,7 @@ jest.mock(
);
jest.mock(
- "../../../../../../components/mui/formik-inputs/mui-formik-select",
+ "../../../../../../../../components/mui/formik-inputs/mui-formik-select",
() => {
const React = require("react");
return {
@@ -62,7 +62,7 @@ jest.mock(
);
jest.mock(
- "../../../../../../components/mui/formik-inputs/mui-formik-pricefield",
+ "../../../../../../../../components/mui/formik-inputs/mui-formik-pricefield",
() => {
const React = require("react");
return {
@@ -75,7 +75,7 @@ jest.mock(
);
jest.mock(
- "../../../../../../components/mui/formik-inputs/mui-formik-discountfield",
+ "../../../../../../../../components/mui/formik-inputs/mui-formik-discountfield",
() => {
const React = require("react");
return {
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/edit-cart-form.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/edit-cart-form.js
similarity index 95%
rename from src/pages/sponsors/sponsor-cart-tab/components/edit-form/edit-cart-form.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/edit-cart-form.js
index bac58b422..34225b10b 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/edit-cart-form.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/edit-cart-form.js
@@ -16,7 +16,7 @@ import { connect } from "react-redux";
import {
getSponsorCartForm,
updateCartForm
-} from "../../../../../actions/sponsor-cart-actions";
+} from "../../../../../../../actions/sponsor-cart-actions";
import EditForm from "./index";
const EditCartForm = ({
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/index.js
similarity index 96%
rename from src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/index.js
index 67331dfa6..7b400226a 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/index.js
@@ -20,13 +20,11 @@ import { Button, Typography } from "@mui/material";
import Box from "@mui/material/Box";
import moment from "moment-timezone";
import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods";
-import FormItemTable from "../../../../../components/mui/FormItemTable";
-import { DISCOUNT_TYPES } from "../../../../../utils/constants";
-import NotesModal from "../../../../../components/mui/NotesModal";
-import ItemSettingsModal from "../../../../../components/mui/ItemSettingsModal";
-import {
- getCurrentApplicableRate
-} from "../../../../../components/mui/FormItemTable/helpers";
+import FormItemTable from "../../../../../../../components/mui/FormItemTable";
+import { DISCOUNT_TYPES } from "../../../../../../../utils/constants";
+import NotesModal from "../../../../../../../components/mui/NotesModal";
+import ItemSettingsModal from "../../../../../../../components/mui/ItemSettingsModal";
+import { getCurrentApplicableRate } from "../../../../../../../components/mui/FormItemTable/helpers";
const parseValue = (item, timeZone) => {
switch (item.type) {
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/new-cart-form.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/new-cart-form.js
similarity index 96%
rename from src/pages/sponsors/sponsor-cart-tab/components/edit-form/new-cart-form.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/new-cart-form.js
index 78ec20c15..389013f42 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/new-cart-form.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/new-cart-form.js
@@ -16,7 +16,7 @@ import { connect } from "react-redux";
import {
addCartForm,
getSponsorForm
-} from "../../../../../actions/sponsor-cart-actions";
+} from "../../../../../../../actions/sponsor-cart-actions";
import EditForm from "./index";
const NewCartForm = ({
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js
similarity index 95%
rename from src/pages/sponsors/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js
index 04c09f6c1..cdc436373 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js
@@ -7,12 +7,12 @@ jest.mock("i18n-react/dist/i18n-react", () => ({
}));
// Mock Redux actions
-jest.mock("../../../../../../actions/sponsor-cart-actions", () => ({
+jest.mock("../../../../../../../../actions/sponsor-cart-actions", () => ({
getSponsorFormsForCart: jest.fn(() => () => Promise.resolve())
}));
// Mock SearchInput component
-jest.mock("../../../../../../components/mui/search-input", () => {
+jest.mock("../../../../../../../../components/mui/search-input", () => {
const React = require("react");
return {
__esModule: true,
@@ -35,7 +35,7 @@ jest.mock("../../../../../../components/mui/search-input", () => {
});
// Mock MuiInfiniteTable component
-jest.mock("../../../../../../components/mui/infinite-table", () => {
+jest.mock("../../../../../../../../components/mui/infinite-table", () => {
const React = require("react");
return {
__esModule: true,
@@ -80,7 +80,7 @@ jest.mock("../../../../../../components/mui/infinite-table", () => {
});
// Mock SponsorAddonSelect component
-jest.mock("../../../../../../components/mui/sponsor-addon-select", () => {
+jest.mock("../../../../../../../../components/mui/sponsor-addon-select", () => {
const React = require("react");
return {
__esModule: true,
@@ -207,7 +207,7 @@ describe("SelectFormDialog", () => {
test("calls getSponsorFormsForCart when dialog opens", () => {
const {
getSponsorFormsForCart
- } = require("../../../../../../actions/sponsor-cart-actions");
+ } = require("../../../../../../../../actions/sponsor-cart-actions");
renderWithStore();
@@ -217,7 +217,7 @@ describe("SelectFormDialog", () => {
test("does not call getSponsorFormsForCart when dialog is closed", () => {
const {
getSponsorFormsForCart
- } = require("../../../../../../actions/sponsor-cart-actions");
+ } = require("../../../../../../../../actions/sponsor-cart-actions");
renderWithStore({ open: false });
@@ -436,7 +436,7 @@ describe("SelectFormDialog", () => {
test("calls getSponsorFormsForCart with search term", async () => {
const {
getSponsorFormsForCart
- } = require("../../../../../../actions/sponsor-cart-actions");
+ } = require("../../../../../../../../actions/sponsor-cart-actions");
renderWithStore();
const searchInput = screen.getByTestId("search-input");
@@ -453,7 +453,7 @@ describe("SelectFormDialog", () => {
test("calls getSponsorFormsForCart with sort parameters", async () => {
const {
getSponsorFormsForCart
- } = require("../../../../../../actions/sponsor-cart-actions");
+ } = require("../../../../../../../../actions/sponsor-cart-actions");
renderWithStore();
// Find sortable column button (code column)
@@ -470,7 +470,7 @@ describe("SelectFormDialog", () => {
test("calls getSponsorFormsForCart to load next page", async () => {
const {
getSponsorFormsForCart
- } = require("../../../../../../actions/sponsor-cart-actions");
+ } = require("../../../../../../../../actions/sponsor-cart-actions");
renderWithStore({}, { total: 20 }); // More items available
const loadMoreButton = screen.getByTestId("load-more");
@@ -482,7 +482,7 @@ describe("SelectFormDialog", () => {
test("does not load more when all items are displayed", () => {
const {
getSponsorFormsForCart
- } = require("../../../../../../actions/sponsor-cart-actions");
+ } = require("../../../../../../../../actions/sponsor-cart-actions");
renderWithStore({}, { total: mockForms.length });
// Initial call only
diff --git a/src/pages/sponsors/sponsor-cart-tab/components/select-form-dialog/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js
similarity index 93%
rename from src/pages/sponsors/sponsor-cart-tab/components/select-form-dialog/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js
index e71088691..fc6233e80 100644
--- a/src/pages/sponsors/sponsor-cart-tab/components/select-form-dialog/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js
@@ -17,10 +17,10 @@ import {
Typography
} from "@mui/material";
import CloseIcon from "@mui/icons-material/Close";
-import SearchInput from "../../../../../components/mui/search-input";
-import { getSponsorFormsForCart } from "../../../../../actions/sponsor-cart-actions";
-import MuiInfiniteTable from "../../../../../components/mui/infinite-table";
-import SponsorAddonSelect from "../../../../../components/mui/sponsor-addon-select";
+import SearchInput from "../../../../../../../components/mui/search-input";
+import { getSponsorFormsForCart } from "../../../../../../../actions/sponsor-cart-actions";
+import MuiInfiniteTable from "../../../../../../../components/mui/infinite-table";
+import SponsorAddonSelect from "../../../../../../../components/mui/sponsor-addon-select";
const SelectFormDialog = ({
availableForms,
diff --git a/src/pages/sponsors/sponsor-cart-tab/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/index.js
similarity index 86%
rename from src/pages/sponsors/sponsor-cart-tab/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/index.js
index ca9a23a11..742342ab0 100644
--- a/src/pages/sponsors/sponsor-cart-tab/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/index.js
@@ -13,12 +13,13 @@
import React, { useState } from "react";
import { Box } from "@mui/material";
+import { connect } from "react-redux";
import SelectFormDialog from "./components/select-form-dialog";
import CartView from "./components/cart-view";
import NewCartForm from "./components/edit-form/new-cart-form";
import EditCartForm from "./components/edit-form/edit-cart-form";
-const SponsorCartTab = ({ sponsor, summitId }) => {
+const SponsorCartTab = ({ sponsor, currentSummit }) => {
const [openAddFormDialog, setOpenAddFormDialog] = useState(false);
const [formEdit, setFormEdit] = useState(null);
const [newForm, setNewForm] = useState(null);
@@ -64,7 +65,7 @@ const SponsorCartTab = ({ sponsor, summitId }) => {
)}
setOpenAddFormDialog(false)}
@@ -73,4 +74,9 @@ const SponsorCartTab = ({ sponsor, summitId }) => {
);
};
-export default SponsorCartTab;
+const mapStateToProps = ({ currentSummitState, currentSponsorState }) => ({
+ currentSummit: currentSummitState.currentSummit,
+ sponsor: currentSponsorState.entity
+});
+
+export default connect(mapStateToProps, {})(SponsorCartTab);
diff --git a/src/pages/sponsors/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js
similarity index 93%
rename from src/pages/sponsors/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js
index 72f84a2bc..1da86aaba 100644
--- a/src/pages/sponsors/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js
@@ -21,12 +21,12 @@ import SwapVertIcon from "@mui/icons-material/SwapVert";
import SearchIcon from "@mui/icons-material/Search";
import CloseIcon from "@mui/icons-material/Close";
import { FormikProvider, useFormik } from "formik";
-import MuiTable from "../../../../../components/mui/table/mui-table";
-import MenuButton from "../../../../../components/mui/menu-button";
-import { querySponsorAddons } from "../../../../../actions/sponsor-actions";
-import { getSponsorForms } from "../../../../../actions/sponsor-forms-actions";
-import { FIVE_PER_PAGE } from "../../../../../utils/constants";
-import MuiFormikSelectGroup from "../../../../../components/mui/formik-inputs/mui-formik-select-group";
+import MuiTable from "../../../../../../../components/mui/table/mui-table";
+import MenuButton from "../../../../../../../components/mui/menu-button";
+import { querySponsorAddons } from "../../../../../../../actions/sponsor-actions";
+import { getSponsorForms } from "../../../../../../../actions/sponsor-forms-actions";
+import { FIVE_PER_PAGE } from "../../../../../../../utils/constants";
+import MuiFormikSelectGroup from "../../../../../../../components/mui/formik-inputs/mui-formik-select-group";
const AddSponsorFormTemplatePopup = ({
onClose,
diff --git a/src/pages/sponsors/sponsor-forms-tab/components/customized-form/customized-form-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form-popup.js
similarity index 97%
rename from src/pages/sponsors/sponsor-forms-tab/components/customized-form/customized-form-popup.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form-popup.js
index 672da5a40..4731b8d98 100644
--- a/src/pages/sponsors/sponsor-forms-tab/components/customized-form/customized-form-popup.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form-popup.js
@@ -15,7 +15,7 @@ import {
resetSponsorCustomizedForm,
saveSponsorCustomizedForm,
updateSponsorCustomizedForm
-} from "../../../../../actions/sponsor-forms-actions";
+} from "../../../../../../../actions/sponsor-forms-actions";
import CustomizedForm from "./customized-form";
const CustomizedFormPopup = ({
diff --git a/src/pages/sponsors/sponsor-forms-tab/components/customized-form/customized-form.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js
similarity index 87%
rename from src/pages/sponsors/sponsor-forms-tab/components/customized-form/customized-form.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js
index a94aad825..68e552b83 100644
--- a/src/pages/sponsors/sponsor-forms-tab/components/customized-form/customized-form.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js
@@ -18,14 +18,14 @@ import {
formMetafieldsValidation,
opensAtValidation,
requiredStringValidation
-} from "../../../../../utils/yup";
-import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield";
-import MuiFormikDatepicker from "../../../../../components/mui/formik-inputs/mui-formik-datepicker";
-import AdditionalInputList from "../../../../../components/mui/formik-inputs/additional-input/additional-input-list";
-import useScrollToError from "../../../../../hooks/useScrollToError";
-import FormikTextEditor from "../../../../../components/inputs/formik-text-editor";
-import { querySponsorAddons } from "../../../../../actions/sponsor-actions";
-import MuiFormikSelectGroup from "../../../../../components/mui/formik-inputs/mui-formik-select-group";
+} from "../../../../../../../utils/yup";
+import MuiFormikTextField from "../../../../../../../components/mui/formik-inputs/mui-formik-textfield";
+import MuiFormikDatepicker from "../../../../../../../components/mui/formik-inputs/mui-formik-datepicker";
+import AdditionalInputList from "../../../../../../../components/mui/formik-inputs/additional-input/additional-input-list";
+import useScrollToError from "../../../../../../../hooks/useScrollToError";
+import FormikTextEditor from "../../../../../../../components/inputs/formik-text-editor";
+import { querySponsorAddons } from "../../../../../../../actions/sponsor-actions";
+import MuiFormikSelectGroup from "../../../../../../../components/mui/formik-inputs/mui-formik-select-group";
const buildInitialValues = (data, summitTZ) => {
const { opens_at, expires_at } = data;
diff --git a/src/pages/sponsors/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js
similarity index 94%
rename from src/pages/sponsors/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js
index b60707291..dd6795e2b 100644
--- a/src/pages/sponsors/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js
@@ -20,16 +20,16 @@ import {
import CloseIcon from "@mui/icons-material/Close";
import ImageIcon from "@mui/icons-material/Image";
import SwapVertIcon from "@mui/icons-material/SwapVert";
-import { formatRateFromCents } from "../../../../../utils/rate-helpers";
-import SearchInput from "../../../../../components/mui/search-input";
+import { formatRateFromCents } from "../../../../../../../utils/rate-helpers";
+import SearchInput from "../../../../../../../components/mui/search-input";
import {
DEFAULT_CURRENT_PAGE,
DEFAULT_PER_PAGE
-} from "../../../../../utils/constants";
+} from "../../../../../../../utils/constants";
-import { getInventoryItems } from "../../../../../actions/inventory-item-actions";
-import MuiTable from "../../../../../components/mui/table/mui-table";
-import MenuButton from "../../../../../components/mui/menu-button";
+import { getInventoryItems } from "../../../../../../../actions/inventory-item-actions";
+import MuiTable from "../../../../../../../components/mui/table/mui-table";
+import MenuButton from "../../../../../../../components/mui/menu-button";
const SponsorFormItemFromInventoryPopup = ({
inventoryItems,
diff --git a/src/pages/sponsors/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js
similarity index 89%
rename from src/pages/sponsors/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js
index 783112d06..4b57b69d6 100644
--- a/src/pages/sponsors/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js
@@ -35,15 +35,19 @@ import {
resetSponsorFormManagedItem,
unarchiveSponsorCustomizedFormItem,
getSponsorFormManagedItem
-} from "../../../../../actions/sponsor-forms-actions";
-import CustomAlert from "../../../../../components/mui/custom-alert";
-import SearchInput from "../../../../../components/mui/search-input";
-import MuiTableEditable from "../../../../../components/mui/editable-table/mui-table-editable";
-import SponsorInventoryDialog from "../../../../sponsors-global/form-templates/sponsor-inventory-popup";
+} from "../../../../../../../actions/sponsor-forms-actions";
+import CustomAlert from "../../../../../../../components/mui/custom-alert";
+import SearchInput from "../../../../../../../components/mui/search-input";
+import MuiTableEditable from "../../../../../../../components/mui/editable-table/mui-table-editable";
+import SponsorInventoryDialog from "../../../../../../sponsors-global/form-templates/sponsor-inventory-popup";
import SponsorFormItemFromInventoryPopup from "./sponsor-form-item-from-inventory";
-import { DEFAULT_CURRENT_PAGE } from "../../../../../utils/constants";
-import { rateCellValidation } from "../../../../../utils/yup";
-import { rateToCents } from "../../../../../utils/rate-helpers";
+import {
+ ACCESS_ROUTES,
+ DEFAULT_CURRENT_PAGE
+} from "../../../../../../../utils/constants";
+import { rateCellValidation } from "../../../../../../../utils/yup";
+import { rateToCents } from "../../../../../../../utils/rate-helpers";
+import Restrict from "../../../../../../../routes/restrict";
const SponsorFormsManageItems = ({
term,
@@ -398,13 +402,16 @@ const mapStateToProps = ({ sponsorCustomizedFormItemsListState }) => ({
currentInventoryItem: sponsorCustomizedFormItemsListState.currentItem
});
-export default connect(mapStateToProps, {
- getSponsorCustomizedFormItems,
- resetSponsorFormManagedItem,
- addSponsorManagedFormItems,
- saveSponsorFormManagedItem,
- deleteSponsorFormManagedItem,
- getSponsorFormManagedItem,
- archiveSponsorCustomizedFormItem,
- unarchiveSponsorCustomizedFormItem
-})(SponsorFormsManageItems);
+export default Restrict(
+ connect(mapStateToProps, {
+ getSponsorCustomizedFormItems,
+ resetSponsorFormManagedItem,
+ addSponsorManagedFormItems,
+ saveSponsorFormManagedItem,
+ deleteSponsorFormManagedItem,
+ getSponsorFormManagedItem,
+ archiveSponsorCustomizedFormItem,
+ unarchiveSponsorCustomizedFormItem
+ })(SponsorFormsManageItems),
+ ACCESS_ROUTES.ADMIN_SPONSORS
+);
diff --git a/src/pages/sponsors/sponsor-forms-tab/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/index.js
similarity index 93%
rename from src/pages/sponsors/sponsor-forms-tab/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/index.js
index aa62f1b1d..781b63b74 100644
--- a/src/pages/sponsors/sponsor-forms-tab/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/index.js
@@ -31,13 +31,13 @@ import {
getSponsorManagedForms,
saveSponsorManagedForm,
unarchiveSponsorCustomizedForm
-} from "../../../actions/sponsor-forms-actions";
-import CustomAlert from "../../../components/mui/custom-alert";
-import SearchInput from "../../../components/mui/search-input";
-import MuiTable from "../../../components/mui/table/mui-table";
+} from "../../../../../actions/sponsor-forms-actions";
+import CustomAlert from "../../../../../components/mui/custom-alert";
+import SearchInput from "../../../../../components/mui/search-input";
+import MuiTable from "../../../../../components/mui/table/mui-table";
import AddSponsorFormTemplatePopup from "./components/add-sponsor-form-template-popup";
import CustomizedFormPopup from "./components/customized-form/customized-form-popup";
-import { DEFAULT_CURRENT_PAGE } from "../../../utils/constants";
+import { DEFAULT_CURRENT_PAGE } from "../../../../../utils/constants";
const SponsorFormsTab = ({
term,
@@ -46,7 +46,7 @@ const SponsorFormsTab = ({
managedForms,
customizedForms,
sponsor,
- summitId,
+ currentSummit,
getSponsorManagedForms,
getSponsorCustomizedForms,
saveSponsorManagedForm,
@@ -112,7 +112,7 @@ const SponsorFormsTab = ({
const handleCustomizedFormManageItems = (item) => {
history.push(
- `/app/summits/${summitId}/sponsors/${sponsor.id}/sponsor-forms/${item.id}/items#forms`
+ `/app/summits/${currentSummit.id}/sponsors/${sponsor.id}/forms/${item.id}/items`
);
};
@@ -377,7 +377,7 @@ const SponsorFormsTab = ({
onClose={() => setOpenPopup(null)}
onSubmit={handleSaveFormFromTemplate}
sponsor={sponsor}
- summitId={summitId}
+ summitId={currentSummit.id}
/>
)}
@@ -386,14 +386,20 @@ const SponsorFormsTab = ({
open={!!customFormEdit}
onClose={() => setCustomFormEdit(null)}
sponsor={sponsor}
- summitId={summitId}
+ summitId={currentSummit.id}
/>
);
};
-const mapStateToProps = ({ sponsorPageFormsListState }) => ({
- ...sponsorPageFormsListState
+const mapStateToProps = ({
+ sponsorPageFormsListState,
+ currentSummitState,
+ currentSponsorState
+}) => ({
+ ...sponsorPageFormsListState,
+ currentSummit: currentSummitState.currentSummit,
+ sponsor: currentSponsorState.entity
});
export default connect(mapStateToProps, {
diff --git a/src/components/forms/sponsor-general-form/add-extra-question-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-extra-question-popup.js
similarity index 97%
rename from src/components/forms/sponsor-general-form/add-extra-question-popup.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-extra-question-popup.js
index dea7b6733..cd798fd50 100644
--- a/src/components/forms/sponsor-general-form/add-extra-question-popup.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-extra-question-popup.js
@@ -24,16 +24,16 @@ import InfoIcon from "@mui/icons-material/Info";
import AddIcon from "@mui/icons-material/Add";
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
import DragIndicatorIcon from "@mui/icons-material/DragIndicator";
-import useScrollToError from "../../../hooks/useScrollToError";
-import MuiFormikTextField from "../../mui/formik-inputs/mui-formik-textfield";
-import MuiFormikSelect from "../../mui/formik-inputs/mui-formik-select";
-import FormikTextEditor from "../../inputs/formik-text-editor";
-import MuiFormikCheckbox from "../../mui/formik-inputs/mui-formik-checkbox";
-import DragAndDropList from "../../mui/dnd-list";
+import useScrollToError from "../../../../../hooks/useScrollToError";
+import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield";
+import MuiFormikSelect from "../../../../../components/mui/formik-inputs/mui-formik-select";
+import FormikTextEditor from "../../../../../components/inputs/formik-text-editor";
+import MuiFormikCheckbox from "../../../../../components/mui/formik-inputs/mui-formik-checkbox";
+import DragAndDropList from "../../../../../components/mui/dnd-list";
import {
deleteSponsorExtraQuestionValue,
updateSponsorExtraQuestionValueOrder
-} from "../../../actions/sponsor-actions";
+} from "../../../../../actions/sponsor-actions";
const AddSponsorExtraQuestionPopup = ({
entity: extraQuestion,
diff --git a/src/components/forms/sponsor-general-form/add-tier-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-tier-popup.js
similarity index 93%
rename from src/components/forms/sponsor-general-form/add-tier-popup.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-tier-popup.js
index fb2fa39a0..fbf6d6d5d 100644
--- a/src/components/forms/sponsor-general-form/add-tier-popup.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/add-tier-popup.js
@@ -19,9 +19,9 @@ import {
import CloseIcon from "@mui/icons-material/Close";
-import useScrollToError from "../../../hooks/useScrollToError";
-import SponsorshipsBySummitSelectMUI from "../../mui/formik-inputs/sponsorship-summit-select-mui";
-import MuiFormikTextField from "../../mui/formik-inputs/mui-formik-textfield";
+import useScrollToError from "../../../../../hooks/useScrollToError";
+import SponsorshipsBySummitSelectMUI from "../../../../../components/mui/formik-inputs/sponsorship-summit-select-mui";
+import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield";
const AddTierPopup = ({ sponsor, open, onClose, onSubmit, summitId }) => {
const formik = useFormik({
diff --git a/src/components/forms/sponsor-general-form/badge-scan-settings.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/badge-scan-settings.js
similarity index 95%
rename from src/components/forms/sponsor-general-form/badge-scan-settings.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/badge-scan-settings.js
index ef00c54f9..fdd353f77 100644
--- a/src/components/forms/sponsor-general-form/badge-scan-settings.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/badge-scan-settings.js
@@ -14,12 +14,12 @@
import React from "react";
import T from "i18n-react/dist/i18n-react";
import { Box, Divider, Grid2, Typography } from "@mui/material";
-import Member from "../../../models/member";
-import ChipSelectInput from "../../mui/chip-select-input";
+import Member from "../../../../../models/member";
+import ChipSelectInput from "../../../../../components/mui/chip-select-input";
import {
denormalizeLeadReportSettings,
renderOptions
-} from "../../../models/lead-report-settings";
+} from "../../../../../models/lead-report-settings";
const BadgeScanSettings = ({
sponsor,
diff --git a/src/components/forms/sponsor-general-form/extra-questions.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/extra-questions.js
similarity index 97%
rename from src/components/forms/sponsor-general-form/extra-questions.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/extra-questions.js
index 19538785c..3a87529b2 100644
--- a/src/components/forms/sponsor-general-form/extra-questions.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/extra-questions.js
@@ -15,8 +15,11 @@ import React, { useState, useEffect } from "react";
import T from "i18n-react/dist/i18n-react";
import { Box, Button, Divider, Grid2, Typography } from "@mui/material";
import AddIcon from "@mui/icons-material/Add";
-import MuiTableSortable from "../../mui/sortable-table/mui-table-sortable";
-import { DEFAULT_CURRENT_PAGE, MAX_PER_PAGE } from "../../../utils/constants";
+import MuiTableSortable from "../../../../../components/mui/sortable-table/mui-table-sortable";
+import {
+ DEFAULT_CURRENT_PAGE,
+ MAX_PER_PAGE
+} from "../../../../../utils/constants";
import AddSponsorExtraQuestionPopup from "./add-extra-question-popup";
const SponsorExtraQuestions = ({
diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js
new file mode 100644
index 000000000..dea556c59
--- /dev/null
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js
@@ -0,0 +1,125 @@
+/**
+ * Copyright 2025 OpenStack Foundation
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * */
+
+import React from "react";
+import { connect } from "react-redux";
+import { Box } from "@mui/material";
+import SponsorHeader from "./sponsor-header";
+import Sponsorship from "./sponsorship";
+import BadgeScanSettings from "./badge-scan-settings";
+import SponsorExtraQuestions from "./extra-questions";
+import {
+ addTierToSponsor,
+ deleteExtraQuestion,
+ getSponsorExtraQuestion,
+ getSponsorLeadReportSettingsMeta,
+ getSponsorshipAddons,
+ getSponsorTiers,
+ removeAddonToSponsorship,
+ removeTierFromSponsor,
+ resetSponsorExtraQuestionForm,
+ saveAddonsToSponsorship,
+ saveSponsorExtraQuestion,
+ saveSponsorExtraQuestionValue,
+ setSelectedSponsorship,
+ updateExtraQuestionOrder,
+ upsertSponsorLeadReportSettings
+} from "../../../../../actions/sponsor-actions";
+
+const SponsorGeneralForm = ({
+ sponsor,
+ member,
+ currentSummit,
+ getSponsorTiers,
+ addTierToSponsor,
+ removeTierFromSponsor,
+ getSponsorshipAddons,
+ setSelectedSponsorship,
+ saveAddonsToSponsorship,
+ removeAddonToSponsorship,
+ getSponsorLeadReportSettingsMeta,
+ upsertSponsorLeadReportSettings,
+ getSponsorExtraQuestion,
+ saveSponsorExtraQuestion,
+ saveSponsorExtraQuestionValue,
+ resetSponsorExtraQuestionForm,
+ deleteExtraQuestion,
+ updateExtraQuestionOrder
+}) => {
+ const handleSponsorshipPaginate = (page, perPage, order, orderDir) => {
+ getSponsorTiers(sponsor.id, page, perPage, order, orderDir);
+ };
+
+ return (
+
+
+
+
+
+
+ );
+};
+
+const mapStateToProps = ({
+ loggedUserState,
+ currentSummitState,
+ currentSponsorState
+}) => ({
+ currentSummit: currentSummitState.currentSummit,
+ member: loggedUserState.member,
+ sponsor: currentSponsorState.entity
+});
+
+export default connect(mapStateToProps, {
+ getSponsorLeadReportSettingsMeta,
+ getSponsorTiers,
+ addTierToSponsor,
+ removeTierFromSponsor,
+ getSponsorshipAddons,
+ saveAddonsToSponsorship,
+ removeAddonToSponsorship,
+ setSelectedSponsorship,
+ upsertSponsorLeadReportSettings,
+ getSponsorExtraQuestion,
+ saveSponsorExtraQuestion,
+ saveSponsorExtraQuestionValue,
+ resetSponsorExtraQuestionForm,
+ deleteExtraQuestion,
+ updateExtraQuestionOrder
+})(SponsorGeneralForm);
diff --git a/src/components/forms/sponsor-general-form/manage-tier-addons-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/manage-tier-addons-popup.js
similarity index 97%
rename from src/components/forms/sponsor-general-form/manage-tier-addons-popup.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/manage-tier-addons-popup.js
index be750f25e..64cf96836 100644
--- a/src/components/forms/sponsor-general-form/manage-tier-addons-popup.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/manage-tier-addons-popup.js
@@ -22,9 +22,9 @@ import AddIcon from "@mui/icons-material/Add";
import DeleteIcon from "@mui/icons-material/Delete";
import EditIcon from "@mui/icons-material/Edit";
-import useScrollToError from "../../../hooks/useScrollToError";
-import MuiFormikTextField from "../../mui/formik-inputs/mui-formik-textfield";
-import MuiFormikSummitAddonSelect from "../../mui/formik-inputs/mui-formik-summit-addon-select";
+import useScrollToError from "../../../../../hooks/useScrollToError";
+import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield";
+import MuiFormikSummitAddonSelect from "../../../../../components/mui/formik-inputs/mui-formik-summit-addon-select";
const ManageTierAddonsPopup = ({
sponsorship,
diff --git a/src/components/forms/sponsor-general-form/sponsor-header.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js
similarity index 100%
rename from src/components/forms/sponsor-general-form/sponsor-header.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js
diff --git a/src/components/forms/sponsor-general-form/sponsorship.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js
similarity index 97%
rename from src/components/forms/sponsor-general-form/sponsorship.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js
index 0817b8c13..de2981ca3 100644
--- a/src/components/forms/sponsor-general-form/sponsorship.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js
@@ -15,11 +15,11 @@ import React, { useState } from "react";
import T from "i18n-react/dist/i18n-react";
import { Box, Button, Grid2, Typography } from "@mui/material";
import AddIcon from "@mui/icons-material/Add";
-import MuiTable from "../../mui/table/mui-table";
+import MuiTable from "../../../../../components/mui/table/mui-table";
import AddTierPopup from "./add-tier-popup";
import ManageTierAddonsPopup from "./manage-tier-addons-popup";
-import { DEFAULT_CURRENT_PAGE } from "../../../utils/constants";
-import Member from "../../../models/member";
+import { DEFAULT_CURRENT_PAGE } from "../../../../../utils/constants";
+import Member from "../../../../../models/member";
const Sponsorship = ({
sponsor,
diff --git a/src/pages/sponsors/sponsor-media-upload-tab/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-media-upload-tab/index.js
similarity index 95%
rename from src/pages/sponsors/sponsor-media-upload-tab/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-media-upload-tab/index.js
index db596e786..bc1e590df 100644
--- a/src/pages/sponsors/sponsor-media-upload-tab/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-media-upload-tab/index.js
@@ -24,12 +24,12 @@ import {
getSponsorMURequests,
removeFileForSponsorMU,
uploadFileForSponsorMU
-} from "../../../actions/sponsor-mu-actions";
-import CustomAlert from "../../../components/mui/custom-alert";
-import MuiTable from "../../../components/mui/table/mui-table";
-import { SPONSOR_MEDIA_UPLOAD_STATUS } from "../../../utils/constants";
-import UploadDialog from "../../../components/upload-dialog";
-import showConfirmDialog from "../../../components/mui/showConfirmDialog";
+} from "../../../../../actions/sponsor-mu-actions";
+import CustomAlert from "../../../../../components/mui/custom-alert";
+import MuiTable from "../../../../../components/mui/table/mui-table";
+import { SPONSOR_MEDIA_UPLOAD_STATUS } from "../../../../../utils/constants";
+import UploadDialog from "../../../../../components/upload-dialog";
+import showConfirmDialog from "../../../../../components/mui/showConfirmDialog";
const SponsorMediaUploadTab = ({
sponsorRequests,
diff --git a/src/pages/sponsors/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js
similarity index 89%
rename from src/pages/sponsors/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js
index 27f9b9d39..28b4189b7 100644
--- a/src/pages/sponsors/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js
@@ -2,13 +2,13 @@ import React from "react";
import userEvent from "@testing-library/user-event";
import { act, screen, waitFor } from "@testing-library/react";
import SponsorPagesTab from "../index";
-import { renderWithRedux } from "../../../../utils/test-utils";
-import { DEFAULT_STATE as sponsorPagesDefaultState } from "../../../../reducers/sponsors/sponsor-page-pages-list-reducer";
+import { renderWithRedux } from "../../../../../../utils/test-utils";
+import { DEFAULT_STATE as sponsorPagesDefaultState } from "../../../../../../reducers/sponsors/sponsor-page-pages-list-reducer";
import {
getSponsorCustomizedPage,
archiveCustomizedPage,
unarchiveCustomizedPage
-} from "../../../../actions/sponsor-pages-actions";
+} from "../../../../../../actions/sponsor-pages-actions";
// Mocks
@@ -28,7 +28,7 @@ jest.mock(
);
jest.mock(
- "../../../sponsors-global/page-templates/page-template-popup",
+ "../../../../../sponsors-global/page-templates/page-template-popup",
() =>
function MockPageTemplatePopup({ onClose, onSave, pageTemplate }) {
return (
@@ -41,8 +41,8 @@ jest.mock(
}
);
-jest.mock("../../../../actions/sponsor-pages-actions", () => ({
- ...jest.requireActual("../../../../actions/sponsor-pages-actions"),
+jest.mock("../../../../../../actions/sponsor-pages-actions", () => ({
+ ...jest.requireActual("../../../../../../actions/sponsor-pages-actions"),
getSponsorManagedPages: jest.fn(() => ({ type: "MOCK_ACTION" })),
getSponsorCustomizedPages: jest.fn(() => ({ type: "MOCK_ACTION" })),
getSponsorCustomizedPage: jest.fn(
@@ -55,8 +55,8 @@ jest.mock("../../../../actions/sponsor-pages-actions", () => ({
unarchiveCustomizedPage: jest.fn(() => () => Promise.resolve())
}));
-jest.mock("../../../../actions/sponsor-forms-actions", () => ({
- ...jest.requireActual("../../../../actions/sponsor-forms-actions"),
+jest.mock("../../../../../../actions/sponsor-forms-actions", () => ({
+ ...jest.requireActual("../../../../../../actions/sponsor-forms-actions"),
getSponsorships: jest.fn(() => () => Promise.resolve())
}));
@@ -77,6 +77,9 @@ const createCustomizedPage = (id, overrides = {}) => ({
});
const defaultState = {
+ loggedUserState: {
+ member: { groups: {} }
+ },
sponsorPagePagesListState: {
...sponsorPagesDefaultState,
managedPages: {
@@ -103,6 +106,10 @@ const defaultState = {
id: 1,
time_zone: { name: "UTC" }
}
+ },
+ currentSponsorState: {
+ entity: { id: 1, sponsorships_collection: { sponsorships: [] } },
+ errors: {}
}
};
@@ -166,6 +173,7 @@ describe("SponsorPagesTab", () => {
/>,
{
initialState: {
+ ...defaultState,
sponsorPagePagesListState: {
...defaultState.sponsorPagePagesListState,
customizedPages: {
@@ -192,7 +200,7 @@ describe("SponsorPagesTab", () => {
it("should refresh customized pages list after save", async () => {
const {
getSponsorCustomizedPages
- } = require("../../../../actions/sponsor-pages-actions");
+ } = require("../../../../../../actions/sponsor-pages-actions");
renderWithRedux(
{
/>,
{
initialState: {
+ ...defaultState,
sponsorPagePagesListState: {
...defaultState.sponsorPagePagesListState,
customizedPages: {
@@ -242,6 +251,7 @@ describe("SponsorPagesTab", () => {
,
{
initialState: {
+ ...defaultState,
sponsorPagePagesListState: {
...defaultState.sponsorPagePagesListState,
customizedPages: {
@@ -267,6 +277,7 @@ describe("SponsorPagesTab", () => {
,
{
initialState: {
+ ...defaultState,
sponsorPagePagesListState: {
...defaultState.sponsorPagePagesListState,
customizedPages: {
diff --git a/src/pages/sponsors/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js
similarity index 95%
rename from src/pages/sponsors/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js
index d839170ff..60a4d6da3 100644
--- a/src/pages/sponsors/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js
@@ -35,15 +35,15 @@ import SearchIcon from "@mui/icons-material/Search";
import CloseIcon from "@mui/icons-material/Close";
import * as yup from "yup";
import { FormikProvider, useFormik } from "formik";
-import MuiTable from "../../../../../components/mui/table/mui-table";
-import MenuButton from "../../../../../components/mui/menu-button";
-import { querySponsorAddons } from "../../../../../actions/sponsor-actions";
-import { getShowPages } from "../../../../../actions/show-pages-actions";
+import MuiTable from "../../../../../../../components/mui/table/mui-table";
+import MenuButton from "../../../../../../../components/mui/menu-button";
+import { querySponsorAddons } from "../../../../../../../actions/sponsor-actions";
+import { getShowPages } from "../../../../../../../actions/show-pages-actions";
import {
DEFAULT_CURRENT_PAGE,
FIVE_PER_PAGE
-} from "../../../../../utils/constants";
-import MuiFormikSelectGroup from "../../../../../components/mui/formik-inputs/mui-formik-select-group";
+} from "../../../../../../../utils/constants";
+import MuiFormikSelectGroup from "../../../../../../../components/mui/formik-inputs/mui-formik-select-group";
const AddSponsorPageTemplatePopup = ({
onClose,
diff --git a/src/pages/sponsors/sponsor-pages-tab/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/index.js
similarity index 93%
rename from src/pages/sponsors/sponsor-pages-tab/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/index.js
index cc362d9f7..7d2fdf266 100644
--- a/src/pages/sponsors/sponsor-pages-tab/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/index.js
@@ -24,29 +24,29 @@ import {
} from "@mui/material";
import AddIcon from "@mui/icons-material/Add";
import {
- getSponsorManagedPages,
+ archiveCustomizedPage,
+ deleteSponsorManagedPage,
+ getSponsorCustomizedPage,
getSponsorCustomizedPages,
- saveSponsorManagedPage,
+ getSponsorManagedPages,
+ resetSponsorPage,
saveSponsorCustomizedPage,
- getSponsorCustomizedPage,
- deleteSponsorManagedPage,
- unarchiveCustomizedPage,
- archiveCustomizedPage,
- resetSponsorPage
-} from "../../../actions/sponsor-pages-actions";
-import CustomAlert from "../../../components/mui/custom-alert";
-import SearchInput from "../../../components/mui/search-input";
-import MuiTable from "../../../components/mui/table/mui-table";
+ saveSponsorManagedPage,
+ unarchiveCustomizedPage
+} from "../../../../../actions/sponsor-pages-actions";
+import CustomAlert from "../../../../../components/mui/custom-alert";
+import SearchInput from "../../../../../components/mui/search-input";
+import MuiTable from "../../../../../components/mui/table/mui-table";
import {
DEFAULT_CURRENT_PAGE,
SPONSOR_MANAGED_PAGE_ASSIGNMENT
-} from "../../../utils/constants";
+} from "../../../../../utils/constants";
import AddSponsorPageTemplatePopup from "./components/add-sponsor-page-template-popup";
-import PageTemplatePopup from "../../sponsors-global/page-templates/page-template-popup";
+import PageTemplatePopup from "../../../../sponsors-global/page-templates/page-template-popup";
const SponsorPagesTab = ({
sponsor,
- summitId,
+ currentSummit,
term,
hideArchived,
managedPages,
@@ -438,7 +438,7 @@ const SponsorPagesTab = ({
{openPopup === "usingTemplate" && (
setOpenPopup(null)}
/>
@@ -450,7 +450,7 @@ const SponsorPagesTab = ({
onClose={handleClosePagePopup}
pageTemplate={currentEditPage}
sponsorshipIds={sponsorshipIds}
- summitId={summitId}
+ summitId={currentSummit.id}
sponsorId={sponsor.id}
summitTZ={summitTZ}
/>
@@ -459,8 +459,14 @@ const SponsorPagesTab = ({
);
};
-const mapStateToProps = ({ sponsorPagePagesListState }) => ({
- ...sponsorPagePagesListState
+const mapStateToProps = ({
+ sponsorPagePagesListState,
+ currentSummitState,
+ currentSponsorState
+}) => ({
+ ...sponsorPagePagesListState,
+ currentSummit: currentSummitState.currentSummit,
+ sponsor: currentSponsorState.entity
});
export default connect(mapStateToProps, {
diff --git a/src/pages/sponsors/sponsor-purchases-tab/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-purchases-tab/index.js
similarity index 94%
rename from src/pages/sponsors/sponsor-purchases-tab/index.js
rename to src/pages/sponsors/sponsor-page/tabs/sponsor-purchases-tab/index.js
index e3cbc28df..35346d893 100644
--- a/src/pages/sponsors/sponsor-purchases-tab/index.js
+++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-purchases-tab/index.js
@@ -23,13 +23,13 @@ import {
Select
} from "@mui/material";
import MenuIcon from "@mui/icons-material/Menu";
-import { getSponsorPurchases } from "../../../actions/sponsor-purchases-actions";
-import SearchInput from "../../../components/mui/search-input";
-import MuiTable from "../../../components/mui/table/mui-table";
+import { getSponsorPurchases } from "../../../../../actions/sponsor-purchases-actions";
+import SearchInput from "../../../../../components/mui/search-input";
+import MuiTable from "../../../../../components/mui/table/mui-table";
import {
DEFAULT_CURRENT_PAGE,
PURCHASE_STATUS
-} from "../../../utils/constants";
+} from "../../../../../utils/constants";
const SponsorPurchasesTab = ({
purchases,
diff --git a/src/pages/sponsors/sponsor-users-list-per-sponsor/index.js b/src/pages/sponsors/sponsor-users-list-per-sponsor/index.js
index b590676f9..e151c946d 100644
--- a/src/pages/sponsors/sponsor-users-list-per-sponsor/index.js
+++ b/src/pages/sponsors/sponsor-users-list-per-sponsor/index.js
@@ -42,11 +42,13 @@ const SponsorUsersListPerSponsorPage = ({
}) => {
const [openPopup, setOpenPopup] = useState(null);
const [userEdit, setUserEdit] = useState(null);
+ const sponsorId = sponsor?.id;
+ const companyId = sponsor?.company?.id;
useEffect(() => {
- getSponsorUserRequests(sponsor.company.id);
- getSponsorUsers(sponsor.id);
- }, []);
+ if (companyId) getSponsorUserRequests(companyId);
+ if (sponsorId) getSponsorUsers(sponsorId);
+ }, [sponsorId, companyId]);
const handleSearch = (searchTerm) => {
getSponsorUsers(sponsor.id, searchTerm);
@@ -158,8 +160,9 @@ const SponsorUsersListPerSponsorPage = ({
);
};
-const mapStateToProps = ({ sponsorUsersListState }) => ({
- ...sponsorUsersListState
+const mapStateToProps = ({ sponsorUsersListState, currentSponsorState }) => ({
+ ...sponsorUsersListState,
+ sponsor: currentSponsorState.entity
});
export default connect(mapStateToProps, {