| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import type { ExtendedSupportCategories } from './Support.constants'
- import { neverGuard } from '@/lib/helpers'
- export type SupportFormState =
- | {
- type: 'initializing'
- }
- | {
- type: 'editing'
- }
- | {
- type: 'submitting'
- }
- | {
- type: 'success'
- sentProjectRef: string | undefined
- sentOrgSlug: string | undefined
- sentCategory: ExtendedSupportCategories
- }
- | {
- type: 'error'
- message: string
- }
- export type SupportFormActions =
- | { type: 'INITIALIZE'; debugSource?: string }
- | { type: 'SUBMIT'; debugSource?: string }
- | {
- type: 'SUCCESS'
- sentProjectRef: string | undefined
- sentOrgSlug: string | undefined
- sentCategory: ExtendedSupportCategories
- debugSource?: string
- }
- | { type: 'ERROR'; message: string; debugSource?: string }
- | { type: 'RETURN_TO_EDITING'; debugSource?: string }
- export function createInitialSupportFormState(): SupportFormState {
- return {
- type: 'initializing',
- }
- }
- export function supportFormReducer(
- state: SupportFormState,
- action: SupportFormActions
- ): SupportFormState {
- switch (state.type) {
- case 'initializing':
- if (action.type === 'INITIALIZE') {
- return { type: 'editing' }
- }
- console.warn(
- `[SupportForm > supportFormReducer] ${action.type} action not allowed in 'initializing' state`
- )
- return state
- case 'editing':
- if (action.type === 'SUBMIT') {
- return { type: 'submitting' }
- }
- console.warn(
- `[SupportForm > supportFromReducer] ${action.type} action not allowed in 'filling_out' state`
- )
- return state
- case 'submitting':
- if (action.type === 'SUCCESS') {
- return {
- type: 'success',
- sentProjectRef: action.sentProjectRef,
- sentOrgSlug: action.sentOrgSlug,
- sentCategory: action.sentCategory,
- }
- }
- if (action.type === 'ERROR') {
- return {
- type: 'error',
- message: action.message,
- }
- }
- console.warn(
- `[SupportForm > supportFormReducer] ${action.type} action not allowed in 'submitting' state`
- )
- return state
- case 'success':
- console.warn(`[SupportForm > supportFormReducer] ${action.type} allowed in 'success' state`)
- return state
- case 'error':
- if (action.type === 'RETURN_TO_EDITING') {
- return { type: 'editing' }
- }
- console.warn(`[SupportForm > supportFormReducer] ${action.type} allowed in 'success' state`)
- return state
- default:
- return neverGuard(state)
- }
- }
|