mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
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}