import styled from 'styled-components';
import { SecondaryButton } from '../atoms/button/SecondaryButton';
import { useHistory } from 'react-router-dom';
export const Top = () => {
const history = useHistory();
const onClickAdmin = () =>
history.push({ pathname: '/users', state: { isAdmin: true } });
const onClickGeneral = () =>
history.push({ pathname: '/users', state: { isAdmin: false } });
return (
<SContainer>
<h2>TOPページです</h2>
<SecondaryButton onClick={onClickAdmin}>管理者</SecondaryButton>
<SecondaryButton onClick={onClickGeneral}>一般ユーザ</SecondaryButton>
</SContainer>
);
};
const SContainer = styled.div`
text-align: center`;
import styled from 'styled-components';
import { SearchInput } from '../molecules/SearchInput';
import { UserCard } from '../organisms/user/UserCard';
import { useLocation } from 'react-router-dom';
export const Users = () => {
const { state } = useLocation();
const isAdmin = state ? state.isAdmin : false;
return (
<SContainer>
<SUserArea>
<h2>ユーザ一覧</h2>
<SearchInput />
{users.map((user) => (
<UserCard key={user.id} user={user} isAdmin={isAdmin} />
))}
</SUserArea>
</SContainer>
);
};
const users = [...Array(10).keys()].map((val) => {
return {
id: val,
name: `あああ${val}`,
image:
'https://images.unsplash.com/photo-1598133894008-61f7fdb8cc3a?q=80&w=988&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D',
email: '12345@example.com',
phone: '000-0000-0000',
company: {
name: 'テスト株式会社',
},
website: 'https://google.com',
};
});
const SContainer = styled.div`
display: flex;
flex-direction: column;
align-items: center;
padding: 24px;
`;
const SUserArea = styled.div`
padding-top: 40px;
width: 100%;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 20px;
`;
import styled from 'styled-components';
import { Card } from '../../atoms/card/Card';
import { UserIconWithName } from '../../molecules/user/UserIcomWithName';
export const UserCard = (props) => {
const { user, isAdmin } = props;
return (
<Card>
<UserIconWithName image={user.image} name={user.name} isAdmin={isAdmin} />
<SDl>
<dt>メール</dt>
<dd>{user.email}</dd>
<dt>TEL</dt>
<dd>{user.phone}</dd>
<dt>会社名</dt>
<dd>{user.company.name}</dd>
<dt>WEB</dt>
<dd>{user.website}</dd>
</SDl>
</Card>
);
};
const SDl = styled.dl`
text-align: left;
dt{
float: left;
}
dd{
padding-left: 32px;
padding-bottom: 8px;
overflow-wrap: break-word;
}
`;
import styled from 'styled-components';
export const UserIconWithName = (props) => {
const { image, name, isAdmin } = props;
return (
<SContainer>
<SImg height={160} width={160} src={image} alt={name} />
<SName>{name}</SName>
{isAdmin && <SEdit>編集</SEdit>}
</SContainer>
);
};
const SContainer = styled.div`
text-align: center;
`;
const SImg = styled.img`
border-radius: 50%;
`;
const SName = styled.p`
font-size: 18px;
font-weight: bold;
margin: 0;
color: #40514;
`;
const SEdit = styled.span`
text-decoration: underline;
color: #aaa;
cursor: pointer;`;