wahyuun
9 months ago
9 changed files with 1152 additions and 81 deletions
@ -0,0 +1,51 @@ |
|||||||
|
import SideProfile from "./components/SideProfile"; |
||||||
|
import Index1 from "./components/Index1"; |
||||||
|
import styles from "./Desktop.module.css"; |
||||||
|
import React, { useState, useEffect } from 'react'; |
||||||
|
import { Nav, NavItem, NavLink, TabContent, TabPane } from 'reactstrap'; |
||||||
|
|
||||||
|
const Desktop = () => { |
||||||
|
const [activeTab, setActiveTab] = useState('tab1') |
||||||
|
const [typeTab, setTypeTab] = useState('myprofile') |
||||||
|
|
||||||
|
return ( |
||||||
|
<main className={styles.myProfile}> |
||||||
|
<section className={styles.profile}> |
||||||
|
<Nav tabs> |
||||||
|
<NavItem> |
||||||
|
<NavLink |
||||||
|
onClick={() => { |
||||||
|
setActiveTab("tab1"); |
||||||
|
setTypeTab("myprofile"); |
||||||
|
}} |
||||||
|
active={activeTab === "tab1"} |
||||||
|
> |
||||||
|
My Profile |
||||||
|
</NavLink> |
||||||
|
</NavItem> |
||||||
|
<NavItem> |
||||||
|
<NavLink |
||||||
|
onClick={() => { |
||||||
|
setActiveTab("tab2"); |
||||||
|
setTypeTab("plan"); |
||||||
|
}} |
||||||
|
active={activeTab === "tab2"} |
||||||
|
> |
||||||
|
Account |
||||||
|
</NavLink> |
||||||
|
</NavItem> |
||||||
|
</Nav> |
||||||
|
<TabContent activeTab={activeTab}> |
||||||
|
<TabPane tabId="tab1"> |
||||||
|
<Index1/> |
||||||
|
</TabPane> |
||||||
|
<TabPane tabId="tab2"> |
||||||
|
Tab Kedua |
||||||
|
</TabPane> |
||||||
|
</TabContent> |
||||||
|
</section> |
||||||
|
</main> |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
|
export default Desktop; |
@ -0,0 +1,23 @@ |
|||||||
|
.myProfile, |
||||||
|
.profile { |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.profile { |
||||||
|
align-self: stretch; |
||||||
|
padding: 15px 30px 30px; |
||||||
|
box-sizing: border-box; |
||||||
|
gap: 15px 0; |
||||||
|
|
||||||
|
} |
||||||
|
.myProfile { |
||||||
|
width: 1300px; |
||||||
|
border-radius: 30px; |
||||||
|
background-color: #fff; |
||||||
|
} |
||||||
|
@media screen and (max-width: 1050px) { |
||||||
|
.profile { |
||||||
|
padding-top: 20px; |
||||||
|
padding-bottom: 20px; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
.obejct11 { |
||||||
|
width: 55px; |
||||||
|
height: 54px; |
||||||
|
position: relative; |
||||||
|
border-radius: 79.5px; |
||||||
|
object-fit: cover; |
||||||
|
} |
||||||
|
.img { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: center; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 20px 0; |
||||||
|
} |
||||||
|
.ibnuHamdani { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.headTitle { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
|
.ibnu { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.headSubtitle { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: center; |
||||||
|
font-size: 16px; |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.head, |
||||||
|
.text { |
||||||
|
box-sizing: border-box; |
||||||
|
display: flex; |
||||||
|
} |
||||||
|
.text { |
||||||
|
width: 1032px; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: center; |
||||||
|
padding: 20px 0; |
||||||
|
gap: 5px 0; |
||||||
|
} |
||||||
|
.head { |
||||||
|
align-self: stretch; |
||||||
|
height: 98px; |
||||||
|
background-color: #fff; |
||||||
|
border: 1px solid #7eacd3; |
||||||
|
flex-shrink: 0; |
||||||
|
flex-direction: row; |
||||||
|
align-items: center; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 0 16px 0 14px; |
||||||
|
gap: 0 20px; |
||||||
|
text-align: left; |
||||||
|
font-size: 20px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
@media screen and (max-width: 450px) { |
||||||
|
.ibnuHamdani { |
||||||
|
font-size: 16px; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,342 @@ |
|||||||
|
import * as XLSX from 'xlsx'; |
||||||
|
import React, { useState, useEffect, useMemo } from 'react'; |
||||||
|
import SweetAlert from 'react-bootstrap-sweetalert'; |
||||||
|
import axios from "../../../../const/interceptorApi" |
||||||
|
import { NotificationContainer, NotificationManager } from 'react-notifications'; |
||||||
|
import { Pagination, Tooltip } from 'antd'; |
||||||
|
import { USER_EDIT, REFFERAL_ADD, REFFERAL_EDIT, ROLE_SEARCH, USER_SEARCH } from '../../../../const/ApiConst'; |
||||||
|
import DialogForm from '../DialogForm' |
||||||
|
import styles from "./Index1.module.css"; |
||||||
|
import stylesModule from "./Index1.module.css"; |
||||||
|
import profile from '../../../../assets/img/profile.png' |
||||||
|
import stylesHead from "./Head.module.css"; |
||||||
|
import moment from 'moment'; |
||||||
|
import { Form } from 'reactstrap'; |
||||||
|
|
||||||
|
const Index1 = () => { |
||||||
|
const token = localStorage.getItem("token") |
||||||
|
const id = localStorage.getItem("user_id") |
||||||
|
|
||||||
|
const config = { |
||||||
|
headers: { |
||||||
|
"Content-Type": "application/json", |
||||||
|
"Authorization": `Bearer ${token}` |
||||||
|
} |
||||||
|
} |
||||||
|
const [openDialog, setOpenDialog] = useState(false) |
||||||
|
const [typeDialog, setTypeDialog] = useState('') |
||||||
|
const [roleList, setRoleList] = useState([]) |
||||||
|
const [refferal, setReferralCode] = useState(null) |
||||||
|
const [isCopied, setIsCopied] = useState(false) |
||||||
|
const [userProfile, setUserprofile] = useState(null) |
||||||
|
|
||||||
|
useEffect(() => { |
||||||
|
getRoleList(); |
||||||
|
getDataProfileUser(); |
||||||
|
}, []) |
||||||
|
|
||||||
|
const getDataProfileUser = async () => { |
||||||
|
const formData = { |
||||||
|
"paging": {"start": 0, "length": -1}, |
||||||
|
"columns": [ |
||||||
|
{"name": "id", "logic_operator": "=", "value": parseInt(id), "operator": "AND"} |
||||||
|
], |
||||||
|
"joins": [ |
||||||
|
{ |
||||||
|
"name": "m_divisi", |
||||||
|
"column_join": "divisi_id", |
||||||
|
"column_results": [ |
||||||
|
"name" |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"name": "refferal_code", |
||||||
|
"column_join": "discount_id", |
||||||
|
"column_results": [ |
||||||
|
"code" |
||||||
|
] |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
const result = await axios |
||||||
|
.post(USER_SEARCH, formData, config) |
||||||
|
.then(res => res) |
||||||
|
.catch((error) => error.response ); |
||||||
|
if (result && result.data && result.data.code == 200) { |
||||||
|
let dataRes = result.data.data[0]; |
||||||
|
setUserprofile(dataRes); |
||||||
|
if(!dataRes.discount_id || dataRes.discount_id === null) { |
||||||
|
saveRefferalCode(dataRes?.id, dataRes?.username, dataRes?.ktp_number); |
||||||
|
} else { |
||||||
|
setReferralCode(dataRes.join_second_code); |
||||||
|
} |
||||||
|
} else { |
||||||
|
NotificationManager.error("Gagal Mengambil Data!!", "Failed"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const handleOpenDialog = (type) => { |
||||||
|
setOpenDialog(true) |
||||||
|
setTypeDialog(type) |
||||||
|
} |
||||||
|
|
||||||
|
const handleCloseDialog = (type, data) => { |
||||||
|
if (type === "profile") { |
||||||
|
saveProfile(data); |
||||||
|
} else if(type === "refferal_code") { |
||||||
|
updateRefferal(data); |
||||||
|
} |
||||||
|
setOpenDialog(false) |
||||||
|
} |
||||||
|
|
||||||
|
const saveProfile = async (data) => { |
||||||
|
let urlEdit = USER_EDIT(userProfile?.id) |
||||||
|
const formData = data |
||||||
|
const result = await axios.put(urlEdit, formData, config) |
||||||
|
.then(res => res) |
||||||
|
.catch((error) => error.response); |
||||||
|
if (result && result.data && result.data.code === 200) { |
||||||
|
getDataProfileUser() |
||||||
|
NotificationManager.success(`Data profile berhasil diedit`, 'Success!!'); |
||||||
|
} else { |
||||||
|
NotificationManager.error(`Data profile gagal di edit`, `Failed!!`); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const updateRefferal = async (data) => { |
||||||
|
let urlEdit = REFFERAL_EDIT(userProfile?.id) |
||||||
|
const formData = data |
||||||
|
const result = await axios.put(urlEdit, formData, config) |
||||||
|
.then(res => res) |
||||||
|
.catch((error) => error.response); |
||||||
|
if (result && result.data && result.data.code === 200) { |
||||||
|
getDataProfileUser(data.user_id, data.username, data.ktp_number); |
||||||
|
NotificationManager.success(`Code refferal berhasil diedit`, 'Success!!'); |
||||||
|
} else { |
||||||
|
NotificationManager.error(`Code refferal gagal di edit`, `Failed!!`); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const toggleAddDialog = () => { |
||||||
|
setOpenDialog(!openDialog) |
||||||
|
} |
||||||
|
|
||||||
|
const getRoleList = async () => { |
||||||
|
const formData = { |
||||||
|
"paging": { "start": 0, "length": -1 }, |
||||||
|
"orders": { "columns": ["id"], "ascending": false } |
||||||
|
} |
||||||
|
const result = await axios |
||||||
|
.post(ROLE_SEARCH, formData, config) |
||||||
|
.then(res => res) |
||||||
|
.catch((error) => error.response); |
||||||
|
if (result && result.data && result.data.code == 200) { |
||||||
|
setRoleList(result.data.data); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const saveRefferalCode = async (user_id, username, ktp_number) => { |
||||||
|
const formData = { |
||||||
|
'code': username + ktp_number.substring(0, 4), |
||||||
|
'amount': 0 |
||||||
|
} |
||||||
|
const result = await axios |
||||||
|
.post(REFFERAL_ADD, formData, config) |
||||||
|
.then((res) => res) |
||||||
|
.catch((error) => error.response); |
||||||
|
if (result && result.data && result.data.code == 200) { |
||||||
|
await getDataProfileUser(user_id, username, ktp_number); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function copyToClipboard(text) { |
||||||
|
navigator.clipboard.writeText(text).then(() => { |
||||||
|
setIsCopied(true); |
||||||
|
setTimeout(() => setIsCopied(false), 2000); |
||||||
|
}, (err) => { |
||||||
|
console.error('Gagal menyalin teks ke clipboard: ', err); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
return ( |
||||||
|
<> |
||||||
|
<NotificationContainer /> |
||||||
|
<DialogForm |
||||||
|
openDialog={openDialog} |
||||||
|
closeDialog={handleCloseDialog} |
||||||
|
toggleDialog={() => toggleAddDialog} |
||||||
|
typeDialogProp={typeDialog} |
||||||
|
roleList={roleList} |
||||||
|
nameProp={userProfile?.name} |
||||||
|
noHpProp={userProfile?.phone_number} |
||||||
|
idNumberProp={userProfile?.ktp_number} |
||||||
|
genderProp={userProfile?.gender} |
||||||
|
divisiProp={userProfile?.join_first_name} |
||||||
|
birthdayPlaceProp={userProfile?.birth_place} |
||||||
|
birthdayDateProp={userProfile?.birth_date} |
||||||
|
addressProp={userProfile?.address} |
||||||
|
emailProp={userProfile?.email} |
||||||
|
userNameProp={userProfile?.username} |
||||||
|
refferalCode={refferal} |
||||||
|
userProfile={userProfile} |
||||||
|
/> |
||||||
|
<div className={stylesHead.head}> |
||||||
|
<div className={stylesHead.img}> |
||||||
|
<img className={stylesHead.obejct11} alt="" src={profile} /> |
||||||
|
</div> |
||||||
|
<div className={stylesHead.text}> |
||||||
|
<div className={stylesHead.headTitle}> |
||||||
|
<div className={stylesHead.ibnuHamdani}> |
||||||
|
{userProfile && userProfile.name != null ? userProfile.name : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={stylesHead.headSubtitle}> |
||||||
|
<div className={stylesHead.ibnu}> |
||||||
|
{userProfile && userProfile.username != null ? userProfile.username : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={stylesModule.btnEdit1} style={{ color: '#969696' }} onClick={() => handleOpenDialog('Settings')}> |
||||||
|
<div className={stylesModule.icon}> |
||||||
|
<i className="fa fa-edit" style={{ fontSize:'16px' }}></i> |
||||||
|
</div> |
||||||
|
<div className={stylesModule.edit} style={{ fontSize:'16px' }}>Edit</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<footer className={styles.index1}> |
||||||
|
<div className={styles.row}> |
||||||
|
<div className={styles.column}> |
||||||
|
<div className={styles.text}> |
||||||
|
<div className={styles.headTitle}> |
||||||
|
<div className={styles.codeReferal}>Refferal Code</div> |
||||||
|
</div> |
||||||
|
<div className={styles.headSubtitle}> |
||||||
|
<div className={styles.ibnu212} style={{ color:'#20A8D8' }}>{refferal ? refferal : 'empty'}</div> |
||||||
|
<Tooltip title= {!isCopied ? "Copy Refferal" : "Copied"}> |
||||||
|
<span onClick={() => copyToClipboard(refferal ? refferal : 'empty')}> |
||||||
|
{isCopied ? |
||||||
|
<i className="fa fa-check" style={{ cursor:'pointer' }}></i> |
||||||
|
: |
||||||
|
<i className="fa fa-clipboard" style={{ cursor:'pointer' }}></i>} |
||||||
|
</span> |
||||||
|
</Tooltip> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.btnEdit1} onClick={() => handleOpenDialog('Refferal')}> |
||||||
|
<div className={styles.icon}> |
||||||
|
<i className="fa fa-edit"></i> |
||||||
|
</div> |
||||||
|
<div className={styles.edit}>Edit</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.row1}> |
||||||
|
<div className={styles.column1}> |
||||||
|
<div className={styles.accountInformation}>Account Information</div> |
||||||
|
<div className={styles.btnEdit2} onClick={() => handleOpenDialog('Account')}> |
||||||
|
<div className={styles.icon1}> |
||||||
|
<i className="fa fa-edit"></i> |
||||||
|
</div> |
||||||
|
<div className={styles.edit1}>Edit</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.column2}> |
||||||
|
<div className={styles.frameParent}> |
||||||
|
<div className={styles.usernameParent}> |
||||||
|
<div className={styles.username}>Username</div> |
||||||
|
<div className={styles.ibnu}> |
||||||
|
{userProfile && userProfile.username != null ? userProfile.username : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.emailParent}> |
||||||
|
<div className={styles.email}>Email</div> |
||||||
|
<div className={styles.ibnuhamdaniintegrasiautamac}> |
||||||
|
{userProfile && userProfile.email != null ? userProfile.email : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.row2}> |
||||||
|
<div className={styles.row3}> |
||||||
|
<div className={styles.personalInformation}>Personal Information</div> |
||||||
|
<div className={styles.btnEdit3} onClick={() => handleOpenDialog('Personal')}> |
||||||
|
<div className={styles.icon3}> |
||||||
|
<i className="fa fa-edit"></i> |
||||||
|
</div> |
||||||
|
<div className={styles.edit2}>Edit</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.div}> |
||||||
|
<div className={styles.row4}> |
||||||
|
<div className={styles.column3}> |
||||||
|
<div className={styles.name}>Name</div> |
||||||
|
<div className={styles.ibnuHamdani}> |
||||||
|
{userProfile && userProfile.name != null ? userProfile.name : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.column4}> |
||||||
|
<div className={styles.noHp}>Telephone</div> |
||||||
|
<div className={styles.birthDetailsColumn}> |
||||||
|
{userProfile && userProfile.phone_number != null ? userProfile.phone_number : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.row5}> |
||||||
|
<div className={styles.column5}> |
||||||
|
<div className={styles.idNumber}>Kode Number</div> |
||||||
|
<div className={styles.div1}> |
||||||
|
{userProfile && userProfile.ktp_number != null ? userProfile.ktp_number : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.column6}> |
||||||
|
<div className={styles.gender}>Gender</div> |
||||||
|
<div className={styles.male}> |
||||||
|
{userProfile && userProfile.gender != null ? userProfile.gender : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.row6}> |
||||||
|
<div className={styles.column7}> |
||||||
|
<div className={styles.division}>Division</div> |
||||||
|
<div className={styles.div2}> |
||||||
|
{userProfile && userProfile.join_first_name != null ? userProfile.join_first_name : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.column8}> |
||||||
|
<div className={styles.placeOfBirth}>Place of Birth</div> |
||||||
|
<div className={styles.div3}> |
||||||
|
{userProfile && userProfile.birth_place != null ? userProfile.birth_place : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.row7}> |
||||||
|
<div className={styles.column9}> |
||||||
|
<div className={styles.role}>Role</div> |
||||||
|
<div className={styles.div4}> |
||||||
|
{userProfile && userProfile.employee_type != null ? userProfile.employee_type : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.column10}> |
||||||
|
<div className={styles.dateOfBirth}>Date of Birth</div> |
||||||
|
<div className={styles.div5}> |
||||||
|
{userProfile && userProfile.birth_date != null ? userProfile.birth_date : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div className={styles.row8}> |
||||||
|
<div className={styles.column11}> |
||||||
|
<div className={styles.address}>Address</div> |
||||||
|
<div className={styles.div6}> |
||||||
|
{userProfile && userProfile.address != null ? userProfile.address : <small style={{ fontStyle: 'italic', color:'gray' }}>empty</small>} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</footer> |
||||||
|
</> |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
|
export default Index1; |
@ -0,0 +1,563 @@ |
|||||||
|
.codeReferal { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.headTitle { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
|
.copyIcon, |
||||||
|
.ibnu212 { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.copyIcon { |
||||||
|
height: 16px; |
||||||
|
width: 16px; |
||||||
|
overflow: hidden; |
||||||
|
flex-shrink: 0; |
||||||
|
} |
||||||
|
.headSubtitle, |
||||||
|
.text { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: center; |
||||||
|
justify-content: flex-start; |
||||||
|
gap: 0 10px; |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.text { |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: center; |
||||||
|
gap: 5px 0; |
||||||
|
min-width: 640px; |
||||||
|
max-width: 100%; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.copyIcon1 { |
||||||
|
height: 24px; |
||||||
|
width: 24px; |
||||||
|
position: relative; |
||||||
|
overflow: hidden; |
||||||
|
flex-shrink: 0; |
||||||
|
} |
||||||
|
.copy { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.btnEdit { |
||||||
|
border-radius: 20px; |
||||||
|
border: 1px solid #969696; |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: center; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 5px 11px 5px 9px; |
||||||
|
gap: 0 11px; |
||||||
|
} |
||||||
|
.editTextIcon { |
||||||
|
height: 20px; |
||||||
|
width: 18px; |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.icon { |
||||||
|
overflow: hidden; |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 5px 8px; |
||||||
|
box-sizing: border-box; |
||||||
|
width: 24px; |
||||||
|
height: 24px; |
||||||
|
} |
||||||
|
.edit { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.btnEdit1, |
||||||
|
.column { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: center; |
||||||
|
justify-content: flex-start; |
||||||
|
} |
||||||
|
.btnEdit1 { |
||||||
|
border-radius: 20px; |
||||||
|
border: 1px solid #969696; |
||||||
|
padding: 5px 11px 5px 9px; |
||||||
|
gap: 0 11px; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
.column { |
||||||
|
align-self: stretch; |
||||||
|
background-color: #fff; |
||||||
|
border: 1px solid #7eacd3; |
||||||
|
box-sizing: border-box; |
||||||
|
flex-wrap: wrap; |
||||||
|
padding: 20px 21px 20px 19px; |
||||||
|
gap: 0 20px; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.accountInformation { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.icon2 { |
||||||
|
height: 20px; |
||||||
|
width: 18px; |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.icon1 { |
||||||
|
overflow: hidden; |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 5px 8px; |
||||||
|
box-sizing: border-box; |
||||||
|
width: 24px; |
||||||
|
height: 24px; |
||||||
|
} |
||||||
|
.edit1 { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.btnEdit2, |
||||||
|
.column1 { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
} |
||||||
|
.btnEdit2 { |
||||||
|
border-radius: 20px; |
||||||
|
border: 1px solid #969696; |
||||||
|
align-items: center; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 5px 11px 5px 9px; |
||||||
|
gap: 0 11px; |
||||||
|
color: #969696; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
.column1 { |
||||||
|
align-self: stretch; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: space-between; |
||||||
|
gap: 20px; |
||||||
|
} |
||||||
|
.ibnu, |
||||||
|
.username { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.username { |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.ibnu { |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.usernameParent { |
||||||
|
flex: 1; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.email { |
||||||
|
position: relative; |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.ibnuhamdaniintegrasiautamac { |
||||||
|
position: relative; |
||||||
|
color: #777; |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
.emailParent, |
||||||
|
.frameParent { |
||||||
|
display: flex; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.emailParent { |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
} |
||||||
|
.frameParent { |
||||||
|
align-self: stretch; |
||||||
|
flex-direction: row; |
||||||
|
flex-wrap: wrap; |
||||||
|
padding: 0 1px 0 0; |
||||||
|
box-sizing: border-box; |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.column2, |
||||||
|
.row, |
||||||
|
.row1 { |
||||||
|
align-self: stretch; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.row1 { |
||||||
|
background-color: #fff; |
||||||
|
border: 1px solid #7eacd3; |
||||||
|
box-sizing: border-box; |
||||||
|
padding: 20px 21px 20px 19px; |
||||||
|
gap: 10px 0; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.row { |
||||||
|
gap: 15px 0; |
||||||
|
} |
||||||
|
.personalInformation { |
||||||
|
position: relative; |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.vectorIcon { |
||||||
|
height: 20px; |
||||||
|
width: 18px; |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.icon3 { |
||||||
|
overflow: hidden; |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 5px 8px; |
||||||
|
box-sizing: border-box; |
||||||
|
width: 24px; |
||||||
|
height: 24px; |
||||||
|
} |
||||||
|
.edit2 { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.btnEdit3, |
||||||
|
.row3 { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
} |
||||||
|
.btnEdit3 { |
||||||
|
border-radius: 20px; |
||||||
|
border: 1px solid #969696; |
||||||
|
align-items: center; |
||||||
|
justify-content: flex-start; |
||||||
|
padding: 5px 11px 5px 9px; |
||||||
|
gap: 0 11px; |
||||||
|
color: #969696; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
.row3 { |
||||||
|
align-self: stretch; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: space-between; |
||||||
|
gap: 20px; |
||||||
|
} |
||||||
|
.name { |
||||||
|
position: relative; |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.ibnuHamdani { |
||||||
|
position: relative; |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column3 { |
||||||
|
flex: 1; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.noHp { |
||||||
|
position: relative; |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.birthDetailsColumn { |
||||||
|
position: relative; |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column4, |
||||||
|
.row4 { |
||||||
|
display: flex; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.column4 { |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
} |
||||||
|
.row4 { |
||||||
|
align-self: stretch; |
||||||
|
flex-direction: row; |
||||||
|
flex-wrap: wrap; |
||||||
|
padding: 0 1px 0 0; |
||||||
|
box-sizing: border-box; |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.div1, |
||||||
|
.idNumber { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.idNumber { |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.div1 { |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column5 { |
||||||
|
flex: 1; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.gender, |
||||||
|
.male { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.gender { |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.male { |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column6, |
||||||
|
.row5 { |
||||||
|
display: flex; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.column6 { |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
} |
||||||
|
.row5 { |
||||||
|
align-self: stretch; |
||||||
|
flex-direction: row; |
||||||
|
flex-wrap: wrap; |
||||||
|
padding: 0 1px 0 0; |
||||||
|
box-sizing: border-box; |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.div2, |
||||||
|
.division { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.division { |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.div2 { |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column7 { |
||||||
|
flex: 1; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.placeOfBirth { |
||||||
|
position: relative; |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.div3 { |
||||||
|
position: relative; |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column8, |
||||||
|
.row6 { |
||||||
|
display: flex; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.column8 { |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
} |
||||||
|
.row6 { |
||||||
|
align-self: stretch; |
||||||
|
flex-direction: row; |
||||||
|
flex-wrap: wrap; |
||||||
|
padding: 0 1px 0 0; |
||||||
|
box-sizing: border-box; |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.div4, |
||||||
|
.role { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.role { |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.div4 { |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column9 { |
||||||
|
flex: 1; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.dateOfBirth { |
||||||
|
position: relative; |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.div5 { |
||||||
|
position: relative; |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column10, |
||||||
|
.row7 { |
||||||
|
display: flex; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.column10 { |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
gap: 10px 0; |
||||||
|
min-width: 378px; |
||||||
|
} |
||||||
|
.row7 { |
||||||
|
align-self: stretch; |
||||||
|
flex-direction: row; |
||||||
|
flex-wrap: wrap; |
||||||
|
padding: 0 1px 0 0; |
||||||
|
box-sizing: border-box; |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.address { |
||||||
|
font-weight: 500; |
||||||
|
} |
||||||
|
.address, |
||||||
|
.div6 { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
.div6 { |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
.column11, |
||||||
|
.row8 { |
||||||
|
display: flex; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.column11 { |
||||||
|
flex: 1; |
||||||
|
flex-direction: column; |
||||||
|
gap: 10px 0; |
||||||
|
} |
||||||
|
.row8 { |
||||||
|
align-self: stretch; |
||||||
|
flex-direction: row; |
||||||
|
} |
||||||
|
.div { |
||||||
|
gap: 20px 0; |
||||||
|
} |
||||||
|
.div, |
||||||
|
.index1, |
||||||
|
.row2 { |
||||||
|
align-self: stretch; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: flex-start; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.row2 { |
||||||
|
background-color: #fff; |
||||||
|
border: 1px solid #7eacd3; |
||||||
|
box-sizing: border-box; |
||||||
|
padding: 20px 21px 20px 19px; |
||||||
|
gap: 10px 0; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.index1 { |
||||||
|
gap: 15px 0; |
||||||
|
text-align: left; |
||||||
|
font-size: 16px; |
||||||
|
color: #969696; |
||||||
|
} |
||||||
|
@media screen and (max-width: 1050px) { |
||||||
|
.text { |
||||||
|
min-width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
@media screen and (max-width: 750px) { |
||||||
|
.emailParent, |
||||||
|
.usernameParent { |
||||||
|
min-width: 100%; |
||||||
|
} |
||||||
|
.frameParent { |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.column3, |
||||||
|
.column4 { |
||||||
|
min-width: 100%; |
||||||
|
} |
||||||
|
.row4 { |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.column5, |
||||||
|
.column6 { |
||||||
|
min-width: 100%; |
||||||
|
} |
||||||
|
.row5 { |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.column7, |
||||||
|
.column8 { |
||||||
|
min-width: 100%; |
||||||
|
} |
||||||
|
.row6 { |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
.column10, |
||||||
|
.column9 { |
||||||
|
min-width: 100%; |
||||||
|
} |
||||||
|
.row7, |
||||||
|
.row8 { |
||||||
|
gap: 0 37px; |
||||||
|
} |
||||||
|
} |
||||||
|
@media screen and (max-width: 450px) { |
||||||
|
.column1, |
||||||
|
.row3 { |
||||||
|
flex-wrap: wrap; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
import "antd/dist/antd.min.css"; |
||||||
|
import { Button } from "antd"; |
||||||
|
import styles from "./SideProfile.module.css"; |
||||||
|
import React, { useState, useEffect, useMemo } from 'react'; |
||||||
|
|
||||||
|
const SideProfile = () => { |
||||||
|
return ( |
||||||
|
<header className={styles.sideProfile}> |
||||||
|
<div className={styles.side}> |
||||||
|
<div className={styles.button1}> |
||||||
|
<div className={styles.plan}>My Profile</div> |
||||||
|
<div className={styles.plan}>Plan</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</header> |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
|
export default SideProfile; |
@ -0,0 +1,44 @@ |
|||||||
|
.button { |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
.plan { |
||||||
|
position: relative; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
.button1 { |
||||||
|
flex: 1; |
||||||
|
align-items: center; |
||||||
|
padding: 15px; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
.button1, |
||||||
|
.side, |
||||||
|
.sideProfile { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
justify-content: flex-start; |
||||||
|
max-width: 100%; |
||||||
|
} |
||||||
|
.side { |
||||||
|
flex: 1; |
||||||
|
background-color: #fff; |
||||||
|
align-items: flex-start; |
||||||
|
gap: 0 15px; |
||||||
|
} |
||||||
|
.sideProfile { |
||||||
|
align-self: stretch; |
||||||
|
align-items: center; |
||||||
|
padding: 30px; |
||||||
|
box-sizing: border-box; |
||||||
|
top: 0; |
||||||
|
z-index: 99; |
||||||
|
position: sticky; |
||||||
|
text-align: left; |
||||||
|
font-size: 20px; |
||||||
|
color: #777; |
||||||
|
} |
||||||
|
@media screen and (max-width: 1200px) { |
||||||
|
.side { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue