From 050f2ec52b80ff64c55e57aeb7bb4cb3a3923322 Mon Sep 17 00:00:00 2001 From: Duncan Date: Thu, 30 Jan 2025 11:53:26 +0200 Subject: [PATCH] switched to fetching competitionInfo --- app/views/registrations/edit.html.erb | 2 +- .../RegistrationAdministrationList.jsx | 32 +++++++++++++++---- .../RegistrationAdministration/index.jsx | 4 +-- .../api/competition/get_competition_info.js | 8 +++++ app/webpacker/lib/requests/routes.js.erb | 2 +- config/locales/en.yml | 1 + 6 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 app/webpacker/components/RegistrationsV2/api/competition/get_competition_info.js diff --git a/app/views/registrations/edit.html.erb b/app/views/registrations/edit.html.erb index 96e85a7c6b8..f4885ebe035 100644 --- a/app/views/registrations/edit.html.erb +++ b/app/views/registrations/edit.html.erb @@ -1,5 +1,5 @@ <% provide(:title, t('registrations.edit_registration.title', person: @user.person&.name || @user.name, comp: @competition.name)) %> <%= render layout: 'nav' do %> - <%= react_component('RegistrationsV2/RegistrationEdit', { competitionInfo: @competition.to_competition_info , + <%= react_component('RegistrationsV2/RegistrationEdit', { competitionId: @competition.id , user: @user }) %> <% end %> diff --git a/app/webpacker/components/RegistrationsV2/RegistrationAdministration/RegistrationAdministrationList.jsx b/app/webpacker/components/RegistrationsV2/RegistrationAdministration/RegistrationAdministrationList.jsx index 1897c4ed0aa..3e158f74943 100644 --- a/app/webpacker/components/RegistrationsV2/RegistrationAdministration/RegistrationAdministrationList.jsx +++ b/app/webpacker/components/RegistrationsV2/RegistrationAdministration/RegistrationAdministrationList.jsx @@ -7,6 +7,7 @@ import { } from 'semantic-ui-react'; import { DateTime } from 'luxon'; import { getAllRegistrations } from '../api/registration/get/get_registrations'; +import getCompetitionInfo from '../api/competition/get_competition_info'; import createSortReducer from '../reducers/sortReducer'; import RegistrationActions from './RegistrationActions'; import { setMessage } from '../Register/RegistrationMessage'; @@ -115,7 +116,28 @@ const columnReducer = (state, action) => { return state; }; -export default function RegistrationAdministrationList({ competitionInfo }) { +export default function RegistrationAdministrationList({ competitionId }) { + const { + isLoading: isCompetitionInfoLoading, + data: competitionInfo, + refetchCompetitionInfo, + } = useQuery({ + queryKey: ['competitionInfo', competitionId], + queryFn: () => getCompetitionInfo(competitionId), + refetchOnWindowFocus: false, + refetchOnReconnect: false, + staleTime: Infinity, + refetchOnMount: 'always', + retry: false, + onError: (err) => { + const { errorCode } = err; + dispatchStore(setMessage( + `competitions.errors.cant_load_competition_info`, + 'negative', + )); + }, + }); + const [expandedColumns, dispatchColumns] = useReducer( columnReducer, initialExpandedColumns, @@ -127,10 +149,6 @@ export default function RegistrationAdministrationList({ competitionInfo }) { const actionsRef = useRef(); - const [autoAcceptEnabled, setAutoAcceptEnabled] = useState( - competitionInfo.auto_accept_registrations, - ); - const [state, dispatchSort] = useReducer(sortReducer, { sortColumn: competitionInfo['using_payment_integrations?'] ? 'paid_on_with_registered_on_fallback' @@ -171,9 +189,9 @@ export default function RegistrationAdministrationList({ competitionInfo }) { 'negative', )); }, - onSuccess: () => { + onSuccess: async () => { dispatchStore(setMessage('competitions.registration_v2.auto_accept.disabled', 'positive')); - setAutoAcceptEnabled(false); + await refetchCompetitionInfo(); }, }); diff --git a/app/webpacker/components/RegistrationsV2/RegistrationAdministration/index.jsx b/app/webpacker/components/RegistrationsV2/RegistrationAdministration/index.jsx index 33a29ba9c12..d1862be3bf4 100644 --- a/app/webpacker/components/RegistrationsV2/RegistrationAdministration/index.jsx +++ b/app/webpacker/components/RegistrationsV2/RegistrationAdministration/index.jsx @@ -6,7 +6,7 @@ import messageReducer from '../reducers/messageReducer'; import StoreProvider from '../../../lib/providers/StoreProvider'; import WCAQueryClientProvider from '../../../lib/providers/WCAQueryClientProvider'; -export default function RegistrationEdit({ competitionInfo }) { +export default function RegistrationEdit({ competitionId }) { const ref = useRef(); return (
@@ -15,7 +15,7 @@ export default function RegistrationEdit({ competitionInfo }) { - +
diff --git a/app/webpacker/components/RegistrationsV2/api/competition/get_competition_info.js b/app/webpacker/components/RegistrationsV2/api/competition/get_competition_info.js new file mode 100644 index 00000000000..d83afb8b3e9 --- /dev/null +++ b/app/webpacker/components/RegistrationsV2/api/competition/get_competition_info.js @@ -0,0 +1,8 @@ +import { competitionApiUrl } from '../../../../lib/requests/routes.js.erb'; +import { fetchJsonOrError } from '../../../../lib/requests/fetchWithAuthenticityToken'; + +export default async function getCompetitionInfo(competitionId) { + const route = competitionApiUrl(competitionId); + const { data } = await fetchJsonOrError(route); + return data; +} diff --git a/app/webpacker/lib/requests/routes.js.erb b/app/webpacker/lib/requests/routes.js.erb index 9eee65af0eb..0fa95020725 100644 --- a/app/webpacker/lib/requests/routes.js.erb +++ b/app/webpacker/lib/requests/routes.js.erb @@ -3,7 +3,7 @@ function jsonToQueryString(json) { Object.entries(json).filter(([key, value]) => value !== null && value !== undefined) ); return (new URLSearchParams(jsonAfterRemovingUndefinedAndNull)).toString(); -} +}routes.js.erb export const editPersonUrl = (userId) => `<%= CGI.unescape(Rails.application.routes.url_helpers.edit_user_path("${userId}"))%>`; diff --git a/config/locales/en.yml b/config/locales/en.yml index 8dd93f82eb5..db6ed1fd728 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1954,6 +1954,7 @@ en: -6002: "You need to finish your registration before you can pay" #context: and when an error occured errors: + cant_load_competition_info: "Failed to load competition information - please retry or contact WST if this error persists." must_use_wca_registration: "Auto-accept can only be used if you are using the WCA website for registrations" auto_accept_limit: "Limit for auto-accepted registrations must be less than the competitor limit" auto_accept_not_negative: "Limit for auto-accepted registrations cannot be less than 0."