d6ca9e6b41
* start adding new report reasons * cleanup * use updated types * cleanup open/closed logic * other fix * state fix * rename type * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/index.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/components/moderation/ReportDialog/utils/useReportOptions.ts Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * add mapping * Replace consts and maps using exported values * Map to deprecated reason if necessary, send some reports only to Bluesky * Use only new report reason types * Cleanup * Bump package, integrate new reasons * Adjust sorting, return type, integrate feedback * Just remove sort * Finish 'other' handling * Update descriptions * Just invert filter logic, no functional change but feels more correct * Clarify handling * fix deep imports * fix type error * [Reporting] Integrate new `ReportDialog` into DMs (#9213) * Update types, fork copy for convo vs message * Integrate in remaining spots * Replace DoneStep with separate dialog that opens after reporting * Handle profile error state by just showing a success message * Delete old dms ReportDialog * Chats only go to bsky * Only open block or delete dialog if submitted successfully * make close button always large * prevent expansion of blockordelete dialog * Delete old report dialog (#9214)e * Skip labeler selection for Bluesky-only cases * Rename AfterReportDialog --------- Co-authored-by: Samuel Newman <mozzius@protonmail.com> --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> Co-authored-by: Eric Bailey <git@esb.lol> Co-authored-by: Samuel Newman <mozzius@protonmail.com>
137 lines
3.0 KiB
TypeScript
137 lines
3.0 KiB
TypeScript
import {type AppBskyLabelerDefs} from '@atproto/api'
|
|
|
|
import {OTHER_REPORT_REASONS} from '#/components/moderation/ReportDialog/const'
|
|
import {
|
|
type ReportCategoryConfig,
|
|
type ReportOption,
|
|
} from '#/components/moderation/ReportDialog/utils/useReportOptions'
|
|
|
|
export type ReportState = {
|
|
selectedCategory?: ReportCategoryConfig
|
|
selectedOption?: ReportOption
|
|
selectedLabeler?: AppBskyLabelerDefs.LabelerViewDetailed
|
|
details?: string
|
|
detailsOpen: boolean
|
|
activeStepIndex1: number
|
|
error?: string
|
|
}
|
|
|
|
export type ReportAction =
|
|
| {
|
|
type: 'selectCategory'
|
|
option: ReportCategoryConfig
|
|
otherOption: ReportOption
|
|
}
|
|
| {
|
|
type: 'clearCategory'
|
|
}
|
|
| {
|
|
type: 'selectOption'
|
|
option: ReportOption
|
|
}
|
|
| {
|
|
type: 'clearOption'
|
|
}
|
|
| {
|
|
type: 'selectLabeler'
|
|
labeler: AppBskyLabelerDefs.LabelerViewDetailed
|
|
}
|
|
| {
|
|
type: 'clearLabeler'
|
|
}
|
|
| {
|
|
type: 'setDetails'
|
|
details: string
|
|
}
|
|
| {
|
|
type: 'setError'
|
|
error: string
|
|
}
|
|
| {
|
|
type: 'clearError'
|
|
}
|
|
| {
|
|
type: 'showDetails'
|
|
}
|
|
|
|
export const initialState: ReportState = {
|
|
selectedCategory: undefined,
|
|
selectedOption: undefined,
|
|
selectedLabeler: undefined,
|
|
details: undefined,
|
|
detailsOpen: false,
|
|
activeStepIndex1: 1,
|
|
}
|
|
|
|
export function reducer(state: ReportState, action: ReportAction): ReportState {
|
|
switch (action.type) {
|
|
case 'selectCategory':
|
|
return {
|
|
...state,
|
|
selectedCategory: action.option,
|
|
activeStepIndex1: action.option.key === 'other' ? 3 : 2,
|
|
selectedOption:
|
|
action.option.key === 'other' ? action.otherOption : undefined,
|
|
}
|
|
case 'clearCategory':
|
|
return {
|
|
...state,
|
|
selectedCategory: undefined,
|
|
selectedOption: undefined,
|
|
selectedLabeler: undefined,
|
|
activeStepIndex1: 1,
|
|
detailsOpen: false,
|
|
}
|
|
case 'selectOption':
|
|
return {
|
|
...state,
|
|
selectedOption: action.option,
|
|
activeStepIndex1: 3,
|
|
detailsOpen: OTHER_REPORT_REASONS.has(action.option.reason),
|
|
}
|
|
case 'clearOption':
|
|
return {
|
|
...state,
|
|
selectedOption: undefined,
|
|
selectedLabeler: undefined,
|
|
activeStepIndex1: 2,
|
|
detailsOpen: false,
|
|
}
|
|
case 'selectLabeler':
|
|
return {
|
|
...state,
|
|
selectedLabeler: action.labeler,
|
|
activeStepIndex1: 4,
|
|
detailsOpen: state.selectedOption
|
|
? OTHER_REPORT_REASONS.has(state.selectedOption?.reason)
|
|
: false,
|
|
}
|
|
case 'clearLabeler':
|
|
return {
|
|
...state,
|
|
selectedLabeler: undefined,
|
|
activeStepIndex1: 3,
|
|
}
|
|
case 'setDetails':
|
|
return {
|
|
...state,
|
|
details: action.details,
|
|
}
|
|
case 'setError':
|
|
return {
|
|
...state,
|
|
error: action.error,
|
|
}
|
|
case 'clearError':
|
|
return {
|
|
...state,
|
|
error: undefined,
|
|
}
|
|
case 'showDetails':
|
|
return {
|
|
...state,
|
|
detailsOpen: true,
|
|
}
|
|
}
|
|
}
|