Skip to content

Commit 93b26a7

Browse files
committed
css 기본 생성스타일 추가
1 parent 512ca26 commit 93b26a7

File tree

2 files changed

+64
-16
lines changed

2 files changed

+64
-16
lines changed

polling-app-client/src/components/Dashboard/GroupCreateModal.jsx

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { Component } from 'react';
22
import { createGroup, getAllUsers } from '../../util/APIUtils';
3-
import { Modal, Input, message, Checkbox, Spin } from 'antd';
3+
import { Modal, Input, message} from 'antd';
4+
import GroupMemberSelector from './GroupMemberSelector';
45

56

67
class GroupCreateModal extends Component {
@@ -69,7 +70,7 @@ class GroupCreateModal extends Component {
6970

7071
render() {
7172
const { visible, onClose } = this.props;
72-
const { name, description, imageUrl, users, selectedUserIds, loading } = this.state;
73+
const { name, description, imageUrl, users, selectedUserIds } = this.state;
7374

7475
return (
7576
<Modal
@@ -80,37 +81,43 @@ class GroupCreateModal extends Component {
8081
okText="생성"
8182
cancelText="취소"
8283
>
84+
<div className="form-group">
85+
<label className="form-label" style={{display:"flex"}}>그룹 이름<p style={{color : "red"}}> *</p></label>
8386
<Input
8487
placeholder="그룹 이름"
8588
value={name}
8689
onChange={e => this.handleChange('name', e.target.value)}
8790
style={{ marginBottom: 12 }}
8891
/>
92+
</div>
93+
<div className="form-group">
94+
<label className="form-label">그룹 소개</label>
8995
<Input.TextArea
9096
placeholder="그룹 소개"
9197
value={description}
9298
onChange={e => this.handleChange('description', e.target.value)}
99+
maxLength={200}
93100
rows={3}
94101
style={{ marginBottom: 12 }}
95102
/>
96-
<Input
103+
</div>
104+
105+
<div className="form-group">
106+
<label className="form-label">그룹 이미지</label>
107+
<Input
97108
placeholder="이미지 URL (선택)"
98109
value={imageUrl}
99110
onChange={e => this.handleChange('imageUrl', e.target.value)}
100111
/>
101-
<div style={{ maxHeight: 150, overflowY: 'auto', border: '1px solid #eee', padding: 8 }}>
102-
{loading ? (
103-
<Spin />
104-
) : users.map(user => (
105-
<Checkbox
106-
key={user.id}
107-
checked={selectedUserIds.includes(user.id)}
108-
onChange={() => this.handleUserSelect(user.id)}
109-
style={{ display: 'block', marginBottom: 6 }}
110-
>
111-
{user.name} ({user.username})
112-
</Checkbox>
113-
))}
112+
</div>
113+
<div className="form-group">
114+
<label className="form-label">그룹 멤버 선택</label>
115+
116+
<GroupMemberSelector
117+
users={users}
118+
selectedUserIds={selectedUserIds}
119+
onChange={(ids) => this.setState({ selectedUserIds: ids })}
120+
/>
114121
</div>
115122
</Modal>
116123
);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import React from 'react';
2+
import { Select, Avatar } from 'antd';
3+
4+
const { Option } = Select;
5+
6+
const GroupMemberSelector = ({ users, selectedUserIds, onChange }) => {
7+
return (
8+
<Select
9+
mode="multiple"
10+
showSearch
11+
placeholder="이름 검색"
12+
value={selectedUserIds}
13+
onChange={onChange}
14+
optionFilterProp="label"
15+
style={{ width: '100%', marginTop: 8 }}
16+
>
17+
{users.map(user => (
18+
<Option key={user.id} value={user.id} label={user.name}>
19+
<div
20+
style={{
21+
display: 'flex',
22+
alignItems: 'center',
23+
padding: '4px 8px',
24+
backgroundColor: selectedUserIds.includes(user.id) ? '#f5f5f5' : 'transparent',
25+
borderRadius: 4,
26+
justifyContent: 'space-between'
27+
}}
28+
>
29+
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
30+
<Avatar style={{ backgroundColor: '#f56a00' }}>{user.name[0]}</Avatar>
31+
<span>{user.name}</span>
32+
</div>
33+
{selectedUserIds.includes(user.id) && <span style={{ color: '#52c41a' }}></span>}
34+
</div>
35+
</Option>
36+
))}
37+
</Select>
38+
);
39+
};
40+
41+
export default GroupMemberSelector;

0 commit comments

Comments
 (0)