Skip to content

Commit

Permalink
Improve type safety with a type guard
Browse files Browse the repository at this point in the history
Refs #1307
  • Loading branch information
thewilkybarkid committed Nov 2, 2023
1 parent 5459bc1 commit 5cab7a8
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
5 changes: 5 additions & 0 deletions src/contact-email-address.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as RTE from 'fp-ts/ReaderTaskEither'
import type { Refinement } from 'fp-ts/Refinement'
import type * as TE from 'fp-ts/TaskEither'
import { flow, pipe } from 'fp-ts/function'
import * as C from 'io-ts/Codec'
Expand Down Expand Up @@ -88,3 +89,7 @@ export const saveContactEmailAddress = (
RTE.asksReaderTaskEither(
RTE.fromTaskEitherK(({ saveContactEmailAddress }) => saveContactEmailAddress(orcid, emailAddress)),
)

export const isUnverified: Refinement<ContactEmailAddress, UnverifiedContactEmailAddress> = (
emailAddress: ContactEmailAddress,
): emailAddress is UnverifiedContactEmailAddress => emailAddress.type === 'unverified'
7 changes: 2 additions & 5 deletions src/my-details-page/verify-contact-email-address.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { type ResponseEnded, Status, type StatusOpen } from 'hyper-ts'
import type { OAuthEnv } from 'hyper-ts-oauth'
import * as RM from 'hyper-ts/ReaderMiddleware'
import { P, match } from 'ts-pattern'
import { getContactEmailAddress, saveContactEmailAddress } from '../contact-email-address'
import { getContactEmailAddress, isUnverified, saveContactEmailAddress } from '../contact-email-address'
import { canChangeContactEmailAddress } from '../feature-flags'
import { setFlashMessage } from '../flash-message'
import { logInAndRedirect } from '../log-in'
Expand Down Expand Up @@ -36,10 +36,7 @@ export const verifyContactEmailAddress = (verify: EmailAddress) =>
'contactEmailAddress',
flow(
RM.fromReaderTaskEitherK(({ user }) => getContactEmailAddress(user.orcid)),
RM.filterOrElseW(
contactEmailAddress => contactEmailAddress.type === 'unverified',
() => 'already-verified' as const,
),
RM.filterOrElseW(isUnverified, () => 'already-verified' as const),
RM.filterOrElseW(
contactEmailAddress => eqEmailAddress.equals(contactEmailAddress.value, verify),
() => 'wrong-email-address' as const,
Expand Down

0 comments on commit 5cab7a8

Please sign in to comment.