refactor: Clean up code by removing unused imports, enhancing component props, and improving styles for better maintainability

This commit is contained in:
Vishnu 2025-05-15 11:06:01 +05:30
parent c77b62db19
commit 304ccf134a
9 changed files with 152 additions and 147 deletions

View File

@ -10,7 +10,6 @@ import {
import ShortcutHelper from "./shortcutHelper"; import ShortcutHelper from "./shortcutHelper";
import { useShortcutStore } from "../../store/builder/store"; import { useShortcutStore } from "../../store/builder/store";
import { usePlayButtonStore } from "../../store/usePlayButtonStore"; import { usePlayButtonStore } from "../../store/usePlayButtonStore";
import OuterClick from "../../utils/outerClick";
const Footer: React.FC = () => { const Footer: React.FC = () => {
const { logs, setIsLogListVisible } = useLogger(); const { logs, setIsLogListVisible } = useLogger();
@ -19,11 +18,6 @@ const Footer: React.FC = () => {
const { isPlaying } = usePlayButtonStore(); const { isPlaying } = usePlayButtonStore();
const { showShortcuts, setShowShortcuts } = useShortcutStore(); const { showShortcuts, setShowShortcuts } = useShortcutStore();
OuterClick({
contextClassName: ["shortcut-helper-overlay"],
setMenuVisible: () => setShowShortcuts(false),
});
return ( return (
<div className="footer-container"> <div className="footer-container">
<div className="footer-wrapper"> <div className="footer-wrapper">
@ -82,7 +76,7 @@ const Footer: React.FC = () => {
showShortcuts ? "visible" : "" showShortcuts ? "visible" : ""
}`} }`}
> >
<ShortcutHelper /> <ShortcutHelper setShowShortcuts={setShowShortcuts}/>
</div> </div>
)} )}
</div> </div>

View File

@ -29,8 +29,8 @@ import {
DublicateIcon, DublicateIcon,
DuplicateInstanceIcon, DuplicateInstanceIcon,
PlayIcon, PlayIcon,
BrowserIcon,
} from "../icons/ShortcutIcons"; } from "../icons/ShortcutIcons";
import { CloseIcon } from "../icons/ExportCommonIcons";
interface ShortcutItem { interface ShortcutItem {
keys: string[]; keys: string[];
@ -44,7 +44,13 @@ interface ShortcutGroup {
items: ShortcutItem[]; items: ShortcutItem[];
} }
const ShortcutHelper = () => { interface ShortcutHelperProps {
setShowShortcuts: (value: boolean) => void;
}
const ShortcutHelper: React.FC<ShortcutHelperProps> = ({
setShowShortcuts,
}) => {
const shortcuts: ShortcutGroup[] = [ const shortcuts: ShortcutGroup[] = [
{ {
category: "Essential", category: "Essential",
@ -256,27 +262,26 @@ const ShortcutHelper = () => {
}, },
], ],
}, },
{
category: "Miscellaneous",
items: [
{
keys: ["F5", "F11", "F12", "CTRL", "+", "R"],
name: "Browser Defaults",
description: "Reserved for browser defaults",
icon: <BrowserIcon />,
},
],
},
]; ];
const [activeCategory, setActiveCategory] = const [activeCategory, setActiveCategory] =
React.useState<string>("Essential"); React.useState<string>("Essential");
const activeShortcuts = const activeShortcuts =
shortcuts.find((group) => group.category === activeCategory)?.items || []; shortcuts.find((group) => group.category === activeCategory)?.items ?? [];
return ( return (
<div className="shortcut-helper-container"> <div className="shortcut-helper-container">
<button
id="close-shortcuts-helper"
className="close-button"
title="close-btn"
onClick={() => {
setShowShortcuts(false);
}}
>
<CloseIcon />
</button>
<div className="header"> <div className="header">
<div className="header-wrapper"> <div className="header-wrapper">
{shortcuts.map((group) => ( {shortcuts.map((group) => (
@ -313,7 +318,7 @@ const ShortcutHelper = () => {
{item.keys.map((key, i) => ( {item.keys.map((key, i) => (
<span <span
key={`${key}-${i}`} key={`${key}-${i}`}
className={`key ${key === "+" || key === "OR" ? "add" : ""}`} className={`key${key === "+" || key === "OR" ? " add" : ""}`}
> >
{key} {key}
</span> </span>

View File

@ -335,6 +335,7 @@ const Tools: React.FC = () => {
{activeModule !== "visualization" && ( {activeModule !== "visualization" && (
<button <button
id="drop-down-button" id="drop-down-button"
title="drop-down"
className="drop-down-option-button" className="drop-down-option-button"
ref={dropdownRef} ref={dropdownRef}
onClick={() => setOpenDrop(!openDrop)} onClick={() => setOpenDrop(!openDrop)}

View File

@ -1,7 +1,7 @@
import React, { useEffect, useMemo, useRef, useState } from "react"; import React, { useEffect, useMemo, useRef, useState } from "react";
import { arrayMove } from "@dnd-kit/sortable"; import { arrayMove } from "@dnd-kit/sortable";
import { useAsset3dWidget, useSocketStore } from "../../../../store/builder/store"; import { useSocketStore } from "../../../../store/builder/store";
import { usePlayButtonStore } from "../../../../store/usePlayButtonStore"; import { usePlayButtonStore } from "../../../../store/usePlayButtonStore";
import { useWidgetStore } from "../../../../store/useWidgetStore"; import { useWidgetStore } from "../../../../store/useWidgetStore";
import { DraggableWidget } from "../2d/DraggableWidget"; import { DraggableWidget } from "../2d/DraggableWidget";
@ -47,7 +47,7 @@ interface PanelProps {
} }
const generateUniqueId = () => const generateUniqueId = () =>
`${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
const Panel: React.FC<PanelProps> = ({ const Panel: React.FC<PanelProps> = ({
selectedZone, selectedZone,
@ -56,7 +56,6 @@ const Panel: React.FC<PanelProps> = ({
setZonesData, setZonesData,
waitingPanels, waitingPanels,
}) => { }) => {
const { widgetSelect, setWidgetSelect } = useAsset3dWidget();
const panelRefs = useRef<{ [side in Side]?: HTMLDivElement }>({}); const panelRefs = useRef<{ [side in Side]?: HTMLDivElement }>({});
const [panelDimensions, setPanelDimensions] = useState<{ const [panelDimensions, setPanelDimensions] = useState<{
[side in Side]?: { width: number; height: number }; [side in Side]?: { width: number; height: number };
@ -183,7 +182,7 @@ const Panel: React.FC<PanelProps> = ({
// Add widget to panel // Add widget to panel
const addWidgetToPanel = async (asset: any, panel: Side) => { const addWidgetToPanel = async (asset: any, panel: Side) => {
const email = localStorage.getItem("email") || ""; const email = localStorage.getItem("email") ?? "";
const organization = email?.split("@")[1]?.split(".")[0]; const organization = email?.split("@")[1]?.split(".")[0];
const newWidget = { const newWidget = {
@ -285,7 +284,7 @@ const Panel: React.FC<PanelProps> = ({
{selectedZone.activeSides.map((side) => ( {selectedZone.activeSides.map((side) => (
<div <div
key={side} key={side}
id="panel-wrapper" id={`panel-wrapper-${side}`}
className={`panel ${side}-panel absolute ${ className={`panel ${side}-panel absolute ${
hiddenPanels[selectedZone.zoneId]?.includes(side) ? "hidePanel" : "" hiddenPanels[selectedZone.zoneId]?.includes(side) ? "hidePanel" : ""
}`} }`}
@ -301,14 +300,14 @@ const Panel: React.FC<PanelProps> = ({
}} }}
> >
<div <div
className={`panel-content className={`panel-content ${
${waitingPanels === side ? `${side}-closing` : ""} waitingPanels === side ? `${side}-closing` : ""
${ }${
!hiddenPanels[selectedZone.zoneId]?.includes(side) && waitingPanels !== side !hiddenPanels[selectedZone.zoneId]?.includes(side) &&
? `${side}-opening` waitingPanels !== side
: "" ? `${side}-opening`
} : ""
${isPlaying ? "fullScreen" : ""}`} } ${isPlaying ? "fullScreen" : ""}`}
style={{ style={{
pointerEvents: pointerEvents:
selectedZone.lockedPanels.includes(side) || selectedZone.lockedPanels.includes(side) ||

View File

@ -71,7 +71,7 @@ const Project: React.FC = () => {
const { toggleThreeD } = useThreeDStore(); const { toggleThreeD } = useThreeDStore();
// simulation store // simulation store
const { isPlaying, setIsPlaying } = usePlayButtonStore(); const { isPlaying } = usePlayButtonStore();
// collaboration store // collaboration store
const { selectedUser } = useSelectedUserStore(); const { selectedUser } = useSelectedUserStore();

View File

@ -1,5 +1,4 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`; let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
// let url_Backend_dwinzo = `http://192.168.0.102:5000`;
type Side = "top" | "bottom" | "left" | "right"; type Side = "top" | "bottom" | "left" | "right";
export const panelData = async ( export const panelData = async (

View File

@ -1,7 +1,6 @@
@use "../../abstracts/variables" as *; @use "../../abstracts/variables" as *;
@use "../../abstracts/mixins" as *; @use "../../abstracts/mixins" as *;
.footer-container { .footer-container {
width: 100%; width: 100%;
position: fixed; position: fixed;
@ -34,7 +33,7 @@
.selector { .selector {
color: var(--text-color); color: var(--text-color);
font-size: var(--font-size-small) font-size: var(--font-size-small);
} }
.icon { .icon {
@ -48,7 +47,7 @@
gap: 6px; gap: 6px;
position: relative; position: relative;
pointer-events: all; pointer-events: all;
// dummy // dummy
.bg-dummy { .bg-dummy {
background: var(--background-color-solid); background: var(--background-color-solid);
position: absolute; position: absolute;
@ -166,11 +165,23 @@
min-height: 320px; min-height: 320px;
height: 320px; height: 320px;
border-radius: 18px; border-radius: 18px;
pointer-events: all;
background: var(--background-color); background: var(--background-color);
backdrop-filter: blur(20px); backdrop-filter: blur(20px);
.close-button {
position: absolute;
@include flex-center;
height: 26px;
width: 26px;
right: 12px;
top: 10px;
background: var(--background-color);
border-radius: #{$border-radius-medium};
outline: 1px solid var(--border-color);
&:hover{
background: var(--background-color-solid);
}
}
.header { .header {
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -192,7 +203,7 @@
padding-left: 10px; padding-left: 10px;
&::before { &::before {
content: ''; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
@ -244,7 +255,6 @@
.shortcut-intro { .shortcut-intro {
display: flex; display: flex;
// align-items: center;
gap: 6px; gap: 6px;
.value-wrapper { .value-wrapper {
@ -254,7 +264,6 @@
.description { .description {
font-size: var(--font-size-tiny); font-size: var(--font-size-tiny);
} }
} }
} }
@ -265,14 +274,22 @@
gap: 6px; gap: 6px;
flex-wrap: wrap; flex-wrap: wrap;
.key { .key {
background: linear-gradient(135.11deg, #656DC2 3.48%, #9526E5 91.33%); background: linear-gradient(
135.11deg,
#656dc2 3.48%,
#9526e5 91.33%
);
@include flex-center;
padding: 4px 10px; padding: 4px 10px;
height: 25px;
border-radius: 4px; border-radius: 4px;
font-family: monospace; font-family: monospace;
font-size: var(--font-size-tiny); font-size: var(--font-size-tiny);
color: var(--icon-default-color-active); color: var(--icon-default-color-active);
&:last-child{
background: var(--background-color-button);
}
} }
.key.add { .key.add {
@ -295,19 +312,12 @@
align-items: flex-start; align-items: flex-start;
/* or center if vertical centering is desired */ /* or center if vertical centering is desired */
} }
} }
} }
.shortcut-helper-overlay { .shortcut-helper-overlay {
max-height: 0; max-height: 0;
overflow: hidden; overflow: hidden;
// opacity: 0;
transform: translateY(20px); transform: translateY(20px);
transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out;
@ -316,4 +326,4 @@
opacity: 1; opacity: 1;
transform: translateY(0); transform: translateY(0);
} }
} }

View File

@ -347,6 +347,77 @@
} }
} }
.controls-player-container {
max-width: 50vw;
border-radius: 15px;
gap: 40px;
background: var(--background-color);
backdrop-filter: blur(20px);
cursor: pointer;
@include flex-center;
justify-content: space-between;
position: fixed;
bottom: 40px;
left: 50%;
transform: translate(-50%, 0);
color: var(--accent-color);
z-index: 100;
isolation: isolate;
font-weight: 700;
padding: 8px;
.controls-left,
.controls-right {
display: flex;
align-items: center;
gap: 12px;
font-size: var(--font-size-small);
.label {
text-transform: capitalize;
font-size: var(--font-size-small);
}
.walkMode-wrapper {
display: flex;
align-items: center;
gap: 4px;
.input-toggle-container {
padding: 0;
gap: 4px;
.label {
font-size: var(--font-size-small);
}
}
}
.btn-wrapper {
display: flex;
justify-content: center;
align-items: center;
gap: 2px;
padding: 4px 8px;
min-width: 64px;
background: var(--background-color);
border-radius: 20px;
height: fit-content;
cursor: pointer;
transition: color .2s;
&:hover {
outline: 1px solid var(--border-color);
color: var(--accent-color);
}
.icon {
width: 16px;
height: 16px;
@include flex-center;
}
}
}
}
.processDisplayer { .processDisplayer {
border-radius: #{$border-radius-large}; border-radius: #{$border-radius-large};
outline: 1px solid var(--border-color); outline: 1px solid var(--border-color);
@ -454,7 +525,7 @@
} }
} }
} }
.storage-container{ .storage-container {
font-size: var(--font-size-tiny); font-size: var(--font-size-tiny);
color: var(--highlight-text-color); color: var(--highlight-text-color);
} }

View File

@ -12,12 +12,16 @@
box-shadow: #{$box-shadow-medium}; box-shadow: #{$box-shadow-medium};
border-radius: #{$border-radius-large}; border-radius: #{$border-radius-large};
width: fit-content; width: fit-content;
transition: width 0.2s;
background: var(--background-color); background: var(--background-color);
backdrop-filter: blur(20px); backdrop-filter: blur(20px);
z-index: 2; z-index: 2;
outline: 1px solid var(--border-color); outline: 1px solid var(--border-color);
outline-offset: -1px; outline-offset: -1px;
transition: transform 0.4s ease-in-out 0.01s;
&.visible {
transform: translate(-50%, -310px);
}
.split { .split {
height: 20px; height: 20px;
@ -47,9 +51,11 @@
position: relative; position: relative;
&:hover { &:hover {
background: color-mix(in srgb, background: color-mix(
var(--highlight-accent-color) 60%, in srgb,
transparent); var(--highlight-accent-color) 60%,
transparent
);
.tooltip { .tooltip {
opacity: 1; opacity: 1;
@ -78,9 +84,11 @@
position: relative; position: relative;
&:hover { &:hover {
background: color-mix(in srgb, background: color-mix(
var(--highlight-accent-color) 60%, in srgb,
transparent); var(--highlight-accent-color) 60%,
transparent
);
} }
.drop-down-container { .drop-down-container {
@ -178,88 +186,6 @@
} }
.tools-container {
transition: transform 0.4s ease-in-out 0.01s;
&.visible {
transform: translate(-50%, -310px);
}
}
.controls-player-container {
width: 663px;
height: 30px;
border-radius: 15px;
background: var(--background-color);
backdrop-filter: blur(20px);
cursor: pointer;
@include flex-center;
justify-content: space-between;
position: fixed;
bottom: 40px;
left: 50%;
transform: translate(-50%, 0);
color: var(--accent-color);
z-index: 100;
isolation: isolate;
font-weight: 700;
padding: 8px;
.controls-left,
.controls-right {
display: flex;
align-items: center;
gap: 12px;
font-size: var(--font-size-small);
.label {
text-transform: capitalize;
font-size: var(--font-size-small);
}
.walkMode-wrapper {
display: flex;
align-items: center;
gap: 4px;
.input-toggle-container {
padding: 0;
gap: 4px;
.label {
font-size: var(--font-size-small);
}
}
}
.btn-wrapper {
background: var(--background-color);
backdrop-filter: blur(8px);
display: flex;
align-items: center;
justify-content: space-between;
gap: 5px;
border-radius: 15px;
padding: 2px 8px;
color: var(--highlight-text-color);
cursor: pointer;
font-size: var(--font-size-small);
.icon {
width: 16px;
height: 16px;
@include flex-center;
}
}
}
}
@keyframes pulse { @keyframes pulse {
0% { 0% {
opacity: 0; opacity: 0;
@ -286,4 +212,4 @@
width: fit-content; width: fit-content;
opacity: 1; opacity: 1;
} }
} }