From a513d660271b0448ead2c4ca4792aaf25d0b13bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Fri, 21 Aug 2026 15:54:08 -0300 Subject: [PATCH 1/5] fix: add is published checkbox on sponsor header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- src/actions/sponsor-actions.js | 25 ++- src/i18n/en.json | 1 + .../tabs/sponsor-general-form/index.js | 9 +- .../sponsor-general-form/sponsor-header.js | 194 +++++++++++------- src/reducers/sponsors/sponsor-reducer.js | 11 +- 5 files changed, 153 insertions(+), 87 deletions(-) diff --git a/src/actions/sponsor-actions.js b/src/actions/sponsor-actions.js index b32b68b40..23a00312e 100644 --- a/src/actions/sponsor-actions.js +++ b/src/actions/sponsor-actions.js @@ -746,16 +746,21 @@ export const updateSponsorOrder = const normalizeSponsor = (entity) => { const normalizedEntity = { ...entity }; - normalizedEntity.company_id = normalizedEntity.company?.id || 0; - normalizedEntity.sponsorship_id = normalizedEntity.sponsorship?.id || 0; - normalizedEntity.featured_event_id = - normalizedEntity.featured_event && normalizedEntity.featured_event.id - ? normalizedEntity.featured_event.id - : 0; - - delete normalizedEntity.featured_event; - delete normalizedEntity.company; - delete normalizedEntity.sponsorship; + if (normalizedEntity.hasOwnProperty("company")) { + normalizedEntity.company_id = normalizedEntity.company?.id || 0; + delete normalizedEntity.company; + } + + if (normalizedEntity.hasOwnProperty("sponsorship")) { + normalizedEntity.sponsorship_id = normalizedEntity.sponsorship?.id || 0; + delete normalizedEntity.sponsorship; + } + + if (normalizedEntity.hasOwnProperty("featured_event")) { + normalizedEntity.featured_event_id = + normalizedEntity.featured_event?.id || 0; + delete normalizedEntity.featured_event; + } return normalizedEntity; }; diff --git a/src/i18n/en.json b/src/i18n/en.json index d8ff57b56..0bab10466 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -2424,6 +2424,7 @@ "general_information": "General Information", "sponsor_name": "Sponsor Name", "sponsor_address": "Sponsor Address", + "published": "Is Published?", "add_tier": "Add Tier", "add_sponsor": "Add Sponsor", "tiers": "Tiers", 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 index ee86dd44f..9ad9868a9 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js @@ -28,6 +28,7 @@ import { removeTierFromSponsor, resetSponsorExtraQuestionForm, saveAddonsToSponsorship, + saveSponsor, saveSponsorExtraQuestion, saveSponsorExtraQuestionValue, setSelectedSponsorship, @@ -52,7 +53,8 @@ const SponsorGeneralForm = ({ saveSponsorExtraQuestionValue, resetSponsorExtraQuestionForm, deleteExtraQuestion, - updateExtraQuestionOrder + updateExtraQuestionOrder, + saveSponsor }) => { const handleSponsorshipPaginate = (page, perPage, order, orderDir) => { getSponsorSponsorships(sponsor.id, page, perPage, order, orderDir); @@ -60,7 +62,7 @@ const SponsorGeneralForm = ({ return ( - + ( - - - - - {T.translate("edit_sponsor.general_information")} - +const SponsorHeader = ({ sponsor, onSave }) => { + const [isPublished, setIsPublished] = useState(sponsor.is_published); + + const handlePublishSave = () => { + const entity = { id: sponsor.id, is_published: isPublished }; + onSave(entity); + }; + + return ( + + + + + {T.translate("edit_sponsor.general_information")} + + - - - - - - {T.translate("edit_sponsor.sponsor_name")} - + + + + + {T.translate("edit_sponsor.sponsor_name")} + + + {sponsor.company?.name} - {sponsor.company?.name} - - - - - - {T.translate("edit_sponsor.sponsor_address")} - + + + + + {T.translate("edit_sponsor.sponsor_address")} + + + + {[ + sponsor.company?.city, + sponsor.company?.state, + sponsor.company?.country + ] + // filter empty or undefined fields + .filter(Boolean) + .join(" - ")} + {sponsor.company?.contact_email && ( + <> +   + + {sponsor.company.contact_email} + + + )} + - - {[ - sponsor.company?.city, - sponsor.company?.state, - sponsor.company?.country - ] - // filter empty or undefined fields - .filter(Boolean) - .join(" - ")} - {sponsor.company?.contact_email && ( - <> -   - - {sponsor.company.contact_email} - - - )} + + + + + {T.translate("edit_sponsor.is_published")} + + + + setIsPublished(!isPublished)} + /> + + - - -); + + ); +}; export default SponsorHeader; diff --git a/src/reducers/sponsors/sponsor-reducer.js b/src/reducers/sponsors/sponsor-reducer.js index 9736a35db..9dcba61eb 100644 --- a/src/reducers/sponsors/sponsor-reducer.js +++ b/src/reducers/sponsors/sponsor-reducer.js @@ -153,7 +153,7 @@ const sponsorReducer = (state = DEFAULT_STATE, action) => { return { ...state, entity: { ...DEFAULT_ENTITY }, errors: {} }; case UPDATE_SPONSOR: - return { ...state, entity: { ...payload }, errors: {} }; + return { ...state, entity: { ...state.entity, ...payload }, errors: {} }; case SPONSOR_ADDED: case RECEIVE_SPONSOR: { const entity = { ...payload.response }; @@ -175,8 +175,13 @@ const sponsorReducer = (state = DEFAULT_STATE, action) => { entity: { ...state.entity, ...entity } }; } - case SPONSOR_UPDATED: - return state; + case SPONSOR_UPDATED: { + const entity = { ...payload.response }; + return { + ...state, + entity: { ...state.entity, ...entity } + }; + } case MEMBER_ADDED_TO_SPONSOR: { const { member } = payload; return { From 4e6435c173aa4a2c6b6277858c45a4a0da36dca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Fri, 21 Aug 2026 16:28:16 -0300 Subject: [PATCH 2/5] fix: add a11y on checkbox, sync data with state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- .../tabs/sponsor-general-form/sponsor-header.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js index af9ce1918..f6908f806 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js @@ -11,7 +11,7 @@ * limitations under the License. * */ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import T from "i18n-react/dist/i18n-react"; import { Box, @@ -25,6 +25,10 @@ import { const SponsorHeader = ({ sponsor, onSave }) => { const [isPublished, setIsPublished] = useState(sponsor.is_published); + useEffect(() => { + setIsPublished(sponsor.is_published); + }, [sponsor.id, sponsor.is_published]); + const handlePublishSave = () => { const entity = { id: sponsor.id, is_published: isPublished }; onSave(entity); @@ -109,6 +113,7 @@ const SponsorHeader = ({ sponsor, onSave }) => { >