Skip to content

Commit c509aac

Browse files
committed
Implements series removal
1 parent add9736 commit c509aac

File tree

4 files changed

+54
-3
lines changed

4 files changed

+54
-3
lines changed

velog-frontend/src/components/series/SeriesViewer/SeriesViewer.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ type Props = {
88
series: SeriesData,
99
ownSeries: boolean,
1010
onEnableEditing: () => void,
11+
onAskRemove: () => void,
1112
};
12-
const SeriesViewer = ({ series, onEnableEditing, ownSeries }: Props) => {
13+
const SeriesViewer = ({ series, onEnableEditing, onAskRemove, ownSeries }: Props) => {
1314
return (
1415
<div className="SeriesViewer">
1516
<h1>{series.name}</h1>
@@ -18,7 +19,9 @@ const SeriesViewer = ({ series, onEnableEditing, ownSeries }: Props) => {
1819
<button className="text-btn" onClick={onEnableEditing}>
1920
수정
2021
</button>
21-
<button className="text-btn">삭제</button>
22+
<button className="text-btn" onClick={onAskRemove}>
23+
삭제
24+
</button>
2225
</div>
2326
)}
2427
<div className="list">

velog-frontend/src/containers/series/SeriesContainer.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { withRouter, type ContextRouter } from 'react-router-dom';
44
import { SeriesActions } from 'store/actionCreators';
55
import { connect } from 'react-redux';
66
import { type State } from 'store';
7+
import QuestionModal from 'components/common/QuestionModal/QuestionModal';
78
import { type SeriesData } from 'store/modules/series';
89
import SeriesViewer from '../../components/series/SeriesViewer/SeriesViewer';
910
import SeriesEditor from '../../components/series/SeriesEditor/SeriesEditor';
@@ -16,7 +17,14 @@ type Props = {
1617
currentUsername: ?string,
1718
} & ContextRouter;
1819

19-
class SeriesContainer extends Component<Props> {
20+
type LocalState = {
21+
remove: boolean,
22+
};
23+
24+
class SeriesContainer extends Component<Props, LocalState> {
25+
state = {
26+
remove: false,
27+
};
2028
initialize = async () => {
2129
if (this.props.shouldCancel) return;
2230
SeriesActions.initialize();
@@ -61,6 +69,27 @@ class SeriesContainer extends Component<Props> {
6169
}
6270
};
6371

72+
askRemoveSeries = () => {
73+
this.setState({
74+
remove: true,
75+
});
76+
};
77+
78+
cancelRemove = () => {
79+
this.setState({
80+
remove: false,
81+
});
82+
};
83+
84+
confirmRemove = () => {
85+
const { username, urlSlug } = this.props.match.params;
86+
if (!username || !urlSlug) return;
87+
SeriesActions.removeSeries({
88+
username,
89+
urlSlug,
90+
});
91+
this.props.history.push(`/@${this.props.currentUsername || ''}`);
92+
};
6493
componentDidMount() {
6594
this.initialize();
6695
}
@@ -80,10 +109,19 @@ class SeriesContainer extends Component<Props> {
80109
) : (
81110
<SeriesViewer
82111
series={series}
112+
onAskRemove={this.askRemoveSeries}
83113
onEnableEditing={this.enableEditing}
84114
ownSeries={currentUsername === series.user.username}
85115
/>
86116
)}
117+
<QuestionModal
118+
title="시리즈 삭제"
119+
description="시리즈를 삭제하시겠습니까?"
120+
confirmText="삭제"
121+
open={this.state.remove}
122+
onCancel={this.cancelRemove}
123+
onConfirm={this.confirmRemove}
124+
/>
87125
</SeriesTemplate>
88126
);
89127
}

velog-frontend/src/lib/api/series.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,11 @@ export type UpdateSeriesPayload = {
2828

2929
export const updateSeries = (payload: UpdateSeriesPayload) =>
3030
axios.patch(`/series/${payload.username}/${payload.urlSlug}`, payload.data);
31+
32+
export type RemoveSeriesPayload = {
33+
urlSlug: string,
34+
username: string,
35+
};
36+
export const removeSeries = ({ username, urlSlug }: RemoveSeriesPayload) => {
37+
return axios.delete(`/series/${username}/${urlSlug}`);
38+
};

velog-frontend/src/store/modules/series.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ const INITIALIZE = 'series/INITIALIZE';
99
const ENABLE_EDITING = 'series/ENABLE_EDITING';
1010
const DISABLE_EDITING = 'series/DISABLE_EDITING';
1111
const UPDATE_SERIES = 'series/UPDATE_SERIES';
12+
const REMOVE_SERIES = 'seres/REMOVE_SERIES';
1213

1314
export const actionCreators = {
1415
getSeries: createAction(GET_SERIES, SeriesAPI.getSeries),
1516
initialize: createAction(INITIALIZE),
1617
enableEditing: createAction(ENABLE_EDITING),
1718
disableEditing: createAction(DISABLE_EDITING),
1819
updateSeries: createAction(UPDATE_SERIES, SeriesAPI.updateSeries),
20+
removeSeries: createAction(REMOVE_SERIES, SeriesAPI.removeSeries),
1921
};
2022

2123
export type SeriesPostData = {

0 commit comments

Comments
 (0)