mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at sys-log 109 lines 2.4 kB view raw
1import {AppBskyLabelerDefs, ComAtprotoModerationDefs} from '@atproto/api' 2 3import {ReportOption} from './utils/useReportOptions' 4 5export type ReportState = { 6 selectedOption?: ReportOption 7 selectedLabeler?: AppBskyLabelerDefs.LabelerViewDetailed 8 details?: string 9 detailsOpen: boolean 10 activeStepIndex1: number 11 error?: string 12} 13 14export type ReportAction = 15 | { 16 type: 'selectOption' 17 option: ReportOption 18 } 19 | { 20 type: 'clearOption' 21 } 22 | { 23 type: 'selectLabeler' 24 labeler: AppBskyLabelerDefs.LabelerViewDetailed 25 } 26 | { 27 type: 'clearLabeler' 28 } 29 | { 30 type: 'setDetails' 31 details: string 32 } 33 | { 34 type: 'setError' 35 error: string 36 } 37 | { 38 type: 'clearError' 39 } 40 | { 41 type: 'showDetails' 42 } 43 44export const initialState: ReportState = { 45 selectedOption: undefined, 46 selectedLabeler: undefined, 47 details: undefined, 48 detailsOpen: false, 49 activeStepIndex1: 1, 50} 51 52export function reducer(state: ReportState, action: ReportAction): ReportState { 53 switch (action.type) { 54 case 'selectOption': 55 return { 56 ...state, 57 selectedOption: action.option, 58 activeStepIndex1: 2, 59 detailsOpen: 60 !!state.details || 61 action.option.reason === ComAtprotoModerationDefs.REASONOTHER, 62 } 63 case 'clearOption': 64 return { 65 ...state, 66 selectedOption: undefined, 67 selectedLabeler: undefined, 68 activeStepIndex1: 1, 69 detailsOpen: 70 !!state.details || 71 state.selectedOption?.reason === ComAtprotoModerationDefs.REASONOTHER, 72 } 73 case 'selectLabeler': 74 return { 75 ...state, 76 selectedLabeler: action.labeler, 77 activeStepIndex1: 3, 78 } 79 case 'clearLabeler': 80 return { 81 ...state, 82 selectedLabeler: undefined, 83 activeStepIndex1: 2, 84 detailsOpen: 85 !!state.details || 86 state.selectedOption?.reason === ComAtprotoModerationDefs.REASONOTHER, 87 } 88 case 'setDetails': 89 return { 90 ...state, 91 details: action.details, 92 } 93 case 'setError': 94 return { 95 ...state, 96 error: action.error, 97 } 98 case 'clearError': 99 return { 100 ...state, 101 error: undefined, 102 } 103 case 'showDetails': 104 return { 105 ...state, 106 detailsOpen: true, 107 } 108 } 109}