refactor: replace div elements with buttons for side selection in WallProperties; improve material preview layout

This commit is contained in:
Nalvazhuthi 2025-06-12 10:39:26 +05:30
commit 752ba96ba8
2 changed files with 156 additions and 9 deletions

View File

@ -119,7 +119,7 @@ const WallProperties = () => {
<div className="material-preview"> <div className="material-preview">
<div className="sides-wrapper"> <div className="sides-wrapper">
<div <button
className={`side-wrapper ${activeSide === "side1" ? "active" : "" className={`side-wrapper ${activeSide === "side1" ? "active" : ""
}`} }`}
onClick={() => setActiveSide("side1")} onClick={() => setActiveSide("side1")}
@ -128,14 +128,15 @@ const WallProperties = () => {
<div className="texture-image"> <div className="texture-image">
{selectedMaterials.side1 && ( {selectedMaterials.side1 && (
<img <img
draggable={false}
src={selectedMaterials.side1.texture} src={selectedMaterials.side1.texture}
alt={selectedMaterials.side1.textureName} alt={selectedMaterials.side1.textureName}
/> />
)} )}
</div> </div>
</div> </button>
<div <button
className={`side-wrapper ${activeSide === "side2" ? "active" : "" className={`side-wrapper ${activeSide === "side2" ? "active" : ""
}`} }`}
onClick={() => setActiveSide("side2")} onClick={() => setActiveSide("side2")}
@ -144,17 +145,19 @@ const WallProperties = () => {
<div className="texture-image"> <div className="texture-image">
{selectedMaterials.side2 && ( {selectedMaterials.side2 && (
<img <img
draggable={false}
src={selectedMaterials.side2.texture} src={selectedMaterials.side2.texture}
alt={selectedMaterials.side2.textureName} alt={selectedMaterials.side2.textureName}
/> />
)} )}
</div> </div>
</div> </button>
</div> </div>
<div className="preview"> <div className="preview">
{selectedMaterials[activeSide] && ( {selectedMaterials[activeSide] && (
<img <img
draggable={false}
src={selectedMaterials[activeSide]!.texture} src={selectedMaterials[activeSide]!.texture}
alt={selectedMaterials[activeSide]!.textureName} alt={selectedMaterials[activeSide]!.textureName}
/> />
@ -168,18 +171,22 @@ const WallProperties = () => {
) : ( ) : (
<div className="material-container"> <div className="material-container">
{materials.map((material, index) => ( {materials.map((material, index) => (
<div <button
className="material-wrapper" className="material-wrapper"
key={`${material.textureName}_${index}`} key={`${material.textureName}_${index}`}
onClick={() => handleSelectMaterial(material)} onClick={() => handleSelectMaterial(material)}
> >
<div className="material-property"> <div className="material-property">
<div className="material-image"> <div className="material-image">
<img src={material.texture} alt={material.textureName} /> <img
draggable={false}
src={material.texture}
alt={material.textureName}
/>
</div> </div>
<div className="material-name">{material.textureName}</div> <div className="material-name">{material.textureName}</div>
</div> </div>
<div <button
className="delete-material" className="delete-material"
onClick={(e) => { onClick={(e) => {
e.stopPropagation(); e.stopPropagation();
@ -187,8 +194,8 @@ const WallProperties = () => {
}} }}
> >
<RemoveIcon /> <RemoveIcon />
</div> </button>
</div> </button>
))} ))}
</div> </div>
)} )}

View File

@ -1114,6 +1114,7 @@
input { input {
padding: 5px 4px; padding: 5px 4px;
text-align: center;
} }
.dropdown { .dropdown {
@ -1527,6 +1528,7 @@
.header { .header {
@include flex-space-between; @include flex-space-between;
border: none; border: none;
.eyedrop-button { .eyedrop-button {
@include flex-center; @include flex-center;
} }
@ -1534,6 +1536,7 @@
.inputs-container { .inputs-container {
@include flex-space-between; @include flex-space-between;
.input-container { .input-container {
padding: 0 4px; padding: 0 4px;
gap: 6px; gap: 6px;
@ -1652,6 +1655,143 @@
} }
} }
.sidebar-right-wrapper {
.wall-properties-container {
.header {
color: var(--background-color-button);
}
.wall-properties {
padding: 12px 0;
.value-field-container {
padding: 0;
.input {
input {
text-align: center;
}
}
}
}
section {
padding: 0;
margin: 0;
max-height: 50vh;
.header-wrapper {
display: flex;
justify-content: space-between;
padding: 12px;
}
.material-preview {
display: flex;
flex-direction: column;
align-items: center;
gap: 15px;
background: var(--Grays-Gray-6, #F2F2F7);
padding: 18px 25px;
.sides-wrapper {
display: flex;
justify-content: space-between;
width: 100%;
background-color: #FCFDFD;
border-radius: 4px;
overflow: hidden;
.side-wrapper {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
padding: 8px 0;
cursor: pointer;
.label {
color: var(--background-color-button);
}
&.active {
background-color: #E0DFFF;
}
.texture-image {
width: 20px;
height: 20px;
border-radius: 50%;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
}
}
.preview {
width: 90%;
// width: 100%;
height: 111px;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
}
.materials {
padding: 6px 12px;
max-height: 250px;
overflow: auto;
.material-container {
display: flex;
flex-direction: column;
gap: 6px;
.material-wrapper {
display: flex;
justify-content: space-between;
align-items: center;
.material-property {
display: flex;
align-items: center;
gap: 6px;
.material-image {
width: 30px;
height: 30px;
border-radius: 6px;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
}
.delete-material {
cursor: pointer;
}
}
}
}
}
}
}
.assets-container-main { .assets-container-main {
width: 100%; width: 100%;
display: flex; display: flex;