diff --git a/.yarn/sdks/typescript/package.json b/.yarn/sdks/typescript/package.json index 19a0b6f1886..27ab4b140b1 100644 --- a/.yarn/sdks/typescript/package.json +++ b/.yarn/sdks/typescript/package.json @@ -1,6 +1,6 @@ { "name": "typescript", - "version": "5.9.3-sdk", + "version": "6.0.2-sdk", "main": "./lib/typescript.js", "type": "commonjs", "bin": { diff --git a/app/javascript/@types/assets.d.ts b/app/javascript/@types/assets.d.ts index cdb2b1a9a23..8b6b6ba3bf7 100644 --- a/app/javascript/@types/assets.d.ts +++ b/app/javascript/@types/assets.d.ts @@ -2,3 +2,5 @@ declare module '*.svg' { const content: string; export default content; } + +declare module 'vite/modulepreload-polyfill'; diff --git a/app/javascript/Authentication/EditUser.tsx b/app/javascript/Authentication/EditUser.tsx index 1659a2b856a..7fe17096acf 100644 --- a/app/javascript/Authentication/EditUser.tsx +++ b/app/javascript/Authentication/EditUser.tsx @@ -103,7 +103,11 @@ function EditUserForm() {
{t('authentication.editUser.accountDataHeader')}
- + >} + showNameWarning + />
diff --git a/app/javascript/CmsAdmin/CmsContentGroupsAdmin/EditCmsContentGroup.tsx b/app/javascript/CmsAdmin/CmsContentGroupsAdmin/EditCmsContentGroup.tsx index 2ba08729dc1..2397be3a192 100644 --- a/app/javascript/CmsAdmin/CmsContentGroupsAdmin/EditCmsContentGroup.tsx +++ b/app/javascript/CmsAdmin/CmsContentGroupsAdmin/EditCmsContentGroup.tsx @@ -13,7 +13,7 @@ import { ErrorDisplay, notEmpty } from '@neinteractiveliterature/litform'; import { buildPermissionInput } from '../../Permissions/PermissionUtils'; import { useChangeSet } from '../../ChangeSet'; -import CmsContentGroupFormFields from './CmsContentGroupFormFields'; +import CmsContentGroupFormFields, { CmsContentGroupFormFieldsProps } from './CmsContentGroupFormFields'; import { CmsContentGroupsAdminQueryData } from './queries.generated'; import { CmsContentTypeIndicator } from '../../graphqlTypes.generated'; import { singleCmsContentGroupAdminLoader, SingleCmsContentGroupAdminLoaderResult } from './loaders'; @@ -89,7 +89,7 @@ function EditCmsContentGroupForm() { disabled={submitInProgress} convention={convention} permissionsChangeSet={permissionsChangeSet} - addPermission={addPermission} + addPermission={addPermission as unknown as CmsContentGroupFormFieldsProps['addPermission']} removePermission={removePermission} /> diff --git a/app/javascript/CmsAdmin/CmsContentGroupsAdmin/NewCmsContentGroup.tsx b/app/javascript/CmsAdmin/CmsContentGroupsAdmin/NewCmsContentGroup.tsx index 9578dec9d9d..84d59e0f7ea 100644 --- a/app/javascript/CmsAdmin/CmsContentGroupsAdmin/NewCmsContentGroup.tsx +++ b/app/javascript/CmsAdmin/CmsContentGroupsAdmin/NewCmsContentGroup.tsx @@ -6,7 +6,7 @@ import { ErrorDisplay } from '@neinteractiveliterature/litform'; import { buildPermissionInput } from '../../Permissions/PermissionUtils'; import { useChangeSet } from '../../ChangeSet'; import usePageTitle from '../../usePageTitle'; -import CmsContentGroupFormFields from './CmsContentGroupFormFields'; +import CmsContentGroupFormFields, { CmsContentGroupFormFieldsProps } from './CmsContentGroupFormFields'; import { CmsContentGroupsAdminQueryData } from './queries.generated'; import { CmsContentTypeIndicator, CreateCmsContentGroupInput } from '../../graphqlTypes.generated'; import { useCmsContentGroupsAdminLoader } from './loaders'; @@ -79,7 +79,7 @@ function NewCmsContentGroup(): React.JSX.Element { disabled={createInProgress} convention={data.convention} permissionsChangeSet={permissionsChangeSet} - addPermission={addPermission} + addPermission={addPermission as unknown as CmsContentGroupFormFieldsProps['addPermission']} removePermission={removePermission} /> diff --git a/app/javascript/CmsAdmin/NavigationItemsAdmin/Client.ts b/app/javascript/CmsAdmin/NavigationItemsAdmin/Client.ts index 31b7a91643d..c4d5c051dea 100644 --- a/app/javascript/CmsAdmin/NavigationItemsAdmin/Client.ts +++ b/app/javascript/CmsAdmin/NavigationItemsAdmin/Client.ts @@ -81,7 +81,7 @@ class Client implements CadmusNavbarAdminClient { }); return data!.cmsParent.cmsNavigationItems.map(graphqlNavigationItemToCadmusNavbarAdminObject); } catch (error) { - this.onError(error); + this.onError(error as Error); throw error; } finally { this.requestsInProgress.loadingNavigationItems = false; @@ -105,7 +105,7 @@ class Client implements CadmusNavbarAdminClient { name: page.name ?? 'Untitled page', })); } catch (error) { - this.onError(error); + this.onError(error as Error); throw error; } finally { this.requestsInProgress.loadingPages = false; @@ -150,7 +150,7 @@ class Client implements CadmusNavbarAdminClient { await this.apolloClient.resetStore(); return graphqlNavigationItemToCadmusNavbarAdminObject(mutationResponse.cms_navigation_item); } catch (error) { - this.onError(error); + this.onError(error as Error); throw error; } finally { this.requestsInProgress.savingNavigationItem = false; @@ -168,7 +168,7 @@ class Client implements CadmusNavbarAdminClient { }); await this.apolloClient.resetStore(); } catch (error) { - this.onError(error); + this.onError(error as Error); throw error; } finally { this.requestsInProgress.deletingNavigationItem = false; @@ -193,7 +193,7 @@ class Client implements CadmusNavbarAdminClient { await this.apolloClient.resetStore(); } catch (error) { - this.onError(error); + this.onError(error as Error); throw error; } finally { this.requestsInProgress.sortingNavigationItems = false; diff --git a/app/javascript/ConventionAdmin/ConventionFormGeneralSection.tsx b/app/javascript/ConventionAdmin/ConventionFormGeneralSection.tsx index d8f36bdf228..39a23b187c5 100644 --- a/app/javascript/ConventionAdmin/ConventionFormGeneralSection.tsx +++ b/app/javascript/ConventionAdmin/ConventionFormGeneralSection.tsx @@ -124,7 +124,11 @@ function ConventionFormGeneralSection({ disabled={disabled} /> - + >} + disabled={disabled} + /> option?.id.toString() ?? ''} getOptionLabel={(option) => option?.name ?? ''} options={cmsLayouts} - onChange={(newValue: typeof convention.defaultLayout) => setDefaultLayout(newValue)} + onChange={(newValue) => newValue && setDefaultLayout(newValue)} styles={selectStyles} isDisabled={disabled} /> @@ -71,7 +71,7 @@ function ConventionFormWebsiteSection({ getOptionValue={(option) => option?.id.toString() ?? ''} getOptionLabel={(option) => option?.name ?? ''} options={pages} - onChange={(newValue: typeof convention.rootPage) => setRootPage(newValue)} + onChange={(newValue) => newValue && setRootPage(newValue)} styles={selectStyles} isDisabled={disabled} /> diff --git a/app/javascript/DevModeGraphiql.tsx b/app/javascript/DevModeGraphiql.tsx index ae8ad2ddd96..ca69e07f097 100644 --- a/app/javascript/DevModeGraphiql.tsx +++ b/app/javascript/DevModeGraphiql.tsx @@ -1,7 +1,7 @@ import React, { useCallback, useContext, useEffect } from 'react'; import { GraphiQL } from 'graphiql'; import { parse } from 'graphql'; -import { Fetcher } from '@graphiql/toolkit'; +import { Fetcher, FetcherParams } from '@graphiql/toolkit'; import { ApolloLink, execute } from '@apollo/client'; import { useIntercodeApolloLink } from './useIntercodeApolloClient'; @@ -27,15 +27,15 @@ function DevModeGraphiql({ authenticityTokens }: DevModeGraphiqlProps): React.JS const link = useIntercodeApolloLink(new URL('/graphql', window.location.href), manager); const client = useApolloClient(); - const fetcher: Fetcher = useCallback( - (operation) => { + const fetcher = useCallback( + (operation: FetcherParams) => { const operationAsGraphQLRequest = operation as unknown as ApolloLink.Request; operationAsGraphQLRequest.query = parse(operation.query); return execute(link, operationAsGraphQLRequest, { client }); }, [link, client], - ); + ) as unknown as Fetcher; return ; } diff --git a/app/javascript/EventAdmin/EditRunModal.tsx b/app/javascript/EventAdmin/EditRunModal.tsx index 8dc44d90e11..e3728bbd50f 100644 --- a/app/javascript/EventAdmin/EditRunModal.tsx +++ b/app/javascript/EventAdmin/EditRunModal.tsx @@ -58,7 +58,12 @@ function EditRunModal({
{run && (
- + >} + />
)}
diff --git a/app/javascript/EventAdmin/NewEvent.tsx b/app/javascript/EventAdmin/NewEvent.tsx index 1db8d75cf38..377173b355e 100644 --- a/app/javascript/EventAdmin/NewEvent.tsx +++ b/app/javascript/EventAdmin/NewEvent.tsx @@ -116,7 +116,7 @@ function NewEvent() { encType: 'application/json', }); } catch (error) { - setCreateError(error); + setCreateError(error instanceof Error ? error : undefined); throw error; } }; diff --git a/app/javascript/EventAdmin/useEventForm.tsx b/app/javascript/EventAdmin/useEventForm.tsx index 3a49e7af454..22eaca16a5e 100644 --- a/app/javascript/EventAdmin/useEventForm.tsx +++ b/app/javascript/EventAdmin/useEventForm.tsx @@ -121,8 +121,8 @@ export default function useEventForm< const { formRef, validate, itemInteractionTrackingProps } = useValidatableForm(); const formResponseValuesChanged = useCallback( - (newResponseValues: EventType['form_response_attrs']) => { - const processedResponseValues = Object.entries(newResponseValues).reduce( + (newResponseValues: unknown) => { + const processedResponseValues = Object.entries(newResponseValues as EventType['form_response_attrs']).reduce( (processed, [key, value]) => ({ ...processed, ...processFormResponseValue(key, value), diff --git a/app/javascript/EventProposals/CreateEventProposalModal.tsx b/app/javascript/EventProposals/CreateEventProposalModal.tsx index dcb97e08bc2..5cdbbe43691 100644 --- a/app/javascript/EventProposals/CreateEventProposalModal.tsx +++ b/app/javascript/EventProposals/CreateEventProposalModal.tsx @@ -83,7 +83,7 @@ function CreateEventProposalModal({ value={department || (eventCategory && eventCategory.department == null ? eventCategory : null)} getOptionValue={(option) => `${option.__typename}:${option.id}`} getOptionLabel={(option) => option.name} - onChange={(entity: (typeof topLevelEntities)[0]) => { + onChange={(entity) => { if (!entity) { setDepartment(undefined); setEventCategory(undefined); @@ -111,9 +111,7 @@ function CreateEventProposalModal({ value={eventCategory} getOptionValue={(option) => option.id.toString()} getOptionLabel={(option) => option.name} - onChange={(category: (typeof departmentEventCategories)[0]) => { - setEventCategory(category); - }} + onChange={(category) => setEventCategory(category ?? undefined)} /> )} @@ -142,9 +140,7 @@ function CreateEventProposalModal({ value={cloneEventProposal} getOptionValue={(option) => option.id.toString()} getOptionLabel={(option) => `${option.title} (${option.event_category.name}, ${option.convention.name})`} - onChange={(proposal: (typeof userEventProposals)[0]) => { - setCloneEventProposal(proposal); - }} + onChange={(proposal) => setCloneEventProposal(proposal ?? undefined)} /> {cloneEventProposal && diff --git a/app/javascript/EventProposals/EventProposalForm.tsx b/app/javascript/EventProposals/EventProposalForm.tsx index 5fca4952a74..de9ea622403 100644 --- a/app/javascript/EventProposals/EventProposalForm.tsx +++ b/app/javascript/EventProposals/EventProposalForm.tsx @@ -51,18 +51,18 @@ function EventProposalFormInner({ return data?.attachImageToEventProposal.attachment; }); - const responseValuesChanged = useCallback( - (newResponseValues: (typeof initialEventProposal)['form_response_attrs']) => { - setEventProposal((prevEventProposal) => ({ - ...prevEventProposal, - form_response_attrs: { - ...prevEventProposal.form_response_attrs, - ...newResponseValues, - }, - })); - }, - [], - ); + const responseValuesChanged = useCallback((newResponseValues: Record) => { + setEventProposal( + (prevEventProposal) => + ({ + ...prevEventProposal, + form_response_attrs: { + ...prevEventProposal.form_response_attrs, + ...newResponseValues, + }, + }) as typeof prevEventProposal, + ); + }, []); const commitResponse = useCallback(async (proposal: typeof eventProposal) => { try { @@ -81,7 +81,7 @@ function EventProposalFormInner({ setUpdatePromise(promise); await promise; } catch (e) { - setUpdateError(e); + setUpdateError(e instanceof Error ? e : undefined); setResponseErrors(parseResponseErrors(e, ['updateEventProposal'])); } finally { setUpdatePromise(undefined); @@ -102,7 +102,7 @@ function EventProposalFormInner({ setSubmitPromise(promise); await promise; } catch (e) { - setSubmitError(e); + setSubmitError(e instanceof Error ? e : undefined); } finally { setSubmitPromise(undefined); } diff --git a/app/javascript/EventsApp/EventCatalog/EventList/EventListFilterableFormItemDropdown.tsx b/app/javascript/EventsApp/EventCatalog/EventList/EventListFilterableFormItemDropdown.tsx index 6ca5739ec6b..f1d01c10f52 100644 --- a/app/javascript/EventsApp/EventCatalog/EventList/EventListFilterableFormItemDropdown.tsx +++ b/app/javascript/EventsApp/EventCatalog/EventList/EventListFilterableFormItemDropdown.tsx @@ -1,4 +1,5 @@ import { useMemo } from 'react'; +import * as React from 'react'; import { useLocation } from 'react-router'; import { DropdownMenu } from '../../../UIComponents/DropdownMenu'; @@ -54,7 +55,12 @@ function EventListFilterableFormItemDropdown({ dropdownClassName="p-2" shouldAutoCloseOnNavigate={shouldAutoCloseOnNavigate} > - + >} + value={value} + /> ); } diff --git a/app/javascript/EventsApp/EventPage/WithdrawMySignupModal.tsx b/app/javascript/EventsApp/EventPage/WithdrawMySignupModal.tsx index 1c8a0488521..42d7f3d8c3b 100644 --- a/app/javascript/EventsApp/EventPage/WithdrawMySignupModal.tsx +++ b/app/javascript/EventsApp/EventPage/WithdrawMySignupModal.tsx @@ -45,7 +45,7 @@ export function WithdrawMySignupModal({ close, event, run, signup, signupRounds close(); } catch (error) { setBusy(false); - setError(error); + setError(error instanceof Error ? error : undefined); } }; diff --git a/app/javascript/EventsApp/ScheduleGrid/ScheduleLayout/ColumnReservationSet.ts b/app/javascript/EventsApp/ScheduleGrid/ScheduleLayout/ColumnReservationSet.ts index 5f3c2212a81..3e017283207 100644 --- a/app/javascript/EventsApp/ScheduleGrid/ScheduleLayout/ColumnReservationSet.ts +++ b/app/javascript/EventsApp/ScheduleGrid/ScheduleLayout/ColumnReservationSet.ts @@ -34,9 +34,9 @@ function compareReservationsForSort(a: ColumnReservation | null, b: ColumnReserv } class ColumnReservationSet { - reservations: (ColumnReservation | null)[]; + reservations!: (ColumnReservation | null)[]; - columnNumberByRunId: Map; + columnNumberByRunId!: Map; constructor() { this.clear(); diff --git a/app/javascript/EventsApp/SignupAdmin/$id/route.tsx b/app/javascript/EventsApp/SignupAdmin/$id/route.tsx index 12598b701ac..40571affaaf 100644 --- a/app/javascript/EventsApp/SignupAdmin/$id/route.tsx +++ b/app/javascript/EventsApp/SignupAdmin/$id/route.tsx @@ -1,6 +1,6 @@ import { useCallback, useContext } from 'react'; import classNames from 'classnames'; -import { ActionFunction, data, Link, Outlet, useSubmit, RouterContextProvider } from 'react-router'; +import { ActionFunction, data, Link, Outlet, useParams, useSubmit, RouterContextProvider } from 'react-router'; import { Trans, useTranslation } from 'react-i18next'; import { TFunction } from 'i18next'; import { DateTime } from 'luxon'; @@ -90,10 +90,6 @@ function getToggleCountedConfirmPrompt(signup: SignupFieldsFragment) { return getMakeCountedConfirmPrompt(signup); } -export type EditSignupProps = { - teamMembersUrl: string; -}; - export const action: ActionFunction = async ({ context, request, params: { id } }) => { const client = context.get(apolloClientContext); const formData = await request.formData(); @@ -107,8 +103,10 @@ export const action: ActionFunction = async ({ context, r return data(result.data); }; -function EditSignup({ teamMembersUrl }: EditSignupProps): React.JSX.Element { +function EditSignup(): React.JSX.Element { const data = useSingleSignupLoader(); + const { eventId } = useParams(); + const teamMembersUrl = `/events/${eventId}/team_members`; const { timezoneName, ticketName } = useContext(AppRootContext); const confirm = useConfirm(); const { t } = useTranslation(); diff --git a/app/javascript/FormAdmin/$id/edit/section/$sectionId/FormSectionEditorContent.tsx b/app/javascript/FormAdmin/$id/edit/section/$sectionId/FormSectionEditorContent.tsx index ab53b394846..e4323a304f5 100644 --- a/app/javascript/FormAdmin/$id/edit/section/$sectionId/FormSectionEditorContent.tsx +++ b/app/javascript/FormAdmin/$id/edit/section/$sectionId/FormSectionEditorContent.tsx @@ -56,7 +56,7 @@ function FormSectionEditorContent(): React.JSX.Element {

{currentSection.title}

diff --git a/app/javascript/FormAdmin/$id/edit/section/$sectionId/NewFormItemModal.tsx b/app/javascript/FormAdmin/$id/edit/section/$sectionId/NewFormItemModal.tsx index 485b7e1a3e4..075e50087e9 100644 --- a/app/javascript/FormAdmin/$id/edit/section/$sectionId/NewFormItemModal.tsx +++ b/app/javascript/FormAdmin/$id/edit/section/$sectionId/NewFormItemModal.tsx @@ -236,7 +236,7 @@ function NewFormItemModal({ setItemType(newValue)} + onValueChange={(newValue) => setItemType(newValue as TypedFormItem['item_type'])} >