update background color

This commit is contained in:
hamid zarghami
2026-07-20 09:56:04 +03:30
parent ee792b69bf
commit bd65d28ea3
3 changed files with 27 additions and 9 deletions
+1 -2
View File
@@ -14,7 +14,6 @@ import { Pages } from "../../../config/Pages";
import { ErrorType } from "../../../helpers/types"; import { ErrorType } from "../../../helpers/types";
import { useSingleUpload } from "../../service/hooks/useServiceData"; import { useSingleUpload } from "../../service/hooks/useServiceData";
import CreateProjectSidebar, { import CreateProjectSidebar, {
BACKGROUND_PRESETS,
SelectedUser, SelectedUser,
} from "./components/CreateProjectSidebar"; } from "./components/CreateProjectSidebar";
import { useCreateProject } from "./hooks/useProjectData"; import { useCreateProject } from "./hooks/useProjectData";
@@ -30,7 +29,7 @@ const CreateProject: FC = () => {
const [isActive, setIsActive] = useState(true); const [isActive, setIsActive] = useState(true);
const [selectedColor, setSelectedColor] = useState("#A8E6CF"); const [selectedColor, setSelectedColor] = useState("#A8E6CF");
const [selectedUsers, setSelectedUsers] = useState<SelectedUser[]>([]); const [selectedUsers, setSelectedUsers] = useState<SelectedUser[]>([]);
const [selectedBackground, setSelectedBackground] = useState<string>(BACKGROUND_PRESETS[0]); const [selectedBackground, setSelectedBackground] = useState<string | null>(null);
const [backgroundImage, setBackgroundImage] = useState<File | null>(null); const [backgroundImage, setBackgroundImage] = useState<File | null>(null);
const [workspaceId, setWorkspaceId] = useState(searchParams.get("workspaceId") ?? ""); const [workspaceId, setWorkspaceId] = useState(searchParams.get("workspaceId") ?? "");
+5 -3
View File
@@ -15,7 +15,7 @@ import { Pages } from "../../../config/Pages";
import { ErrorType } from "../../../helpers/types"; import { ErrorType } from "../../../helpers/types";
import { useSingleUpload } from "../../service/hooks/useServiceData"; import { useSingleUpload } from "../../service/hooks/useServiceData";
import CreateProjectSidebar, { import CreateProjectSidebar, {
BACKGROUND_PRESETS, findMatchingBackgroundPreset,
SelectedUser, SelectedUser,
} from "./components/CreateProjectSidebar"; } from "./components/CreateProjectSidebar";
import { useGetProjectDetail, useUpdateProject } from "./hooks/useProjectData"; import { useGetProjectDetail, useUpdateProject } from "./hooks/useProjectData";
@@ -32,7 +32,7 @@ const UpdateProject: FC = () => {
const [isActive, setIsActive] = useState(true); const [isActive, setIsActive] = useState(true);
const [selectedColor, setSelectedColor] = useState("#A8E6CF"); const [selectedColor, setSelectedColor] = useState("#A8E6CF");
const [selectedUsers, setSelectedUsers] = useState<SelectedUser[]>([]); const [selectedUsers, setSelectedUsers] = useState<SelectedUser[]>([]);
const [selectedBackground, setSelectedBackground] = useState<string>(BACKGROUND_PRESETS[0]); const [selectedBackground, setSelectedBackground] = useState<string | null>(null);
const [backgroundImage, setBackgroundImage] = useState<File | null>(null); const [backgroundImage, setBackgroundImage] = useState<File | null>(null);
const [workspaceId, setWorkspaceId] = useState(""); const [workspaceId, setWorkspaceId] = useState("");
const [existingBackgroundPicture, setExistingBackgroundPicture] = useState(""); const [existingBackgroundPicture, setExistingBackgroundPicture] = useState("");
@@ -119,7 +119,9 @@ const UpdateProject: FC = () => {
: "", : "",
}); });
setIsActive(project.isActive); setIsActive(project.isActive);
setSelectedColor(project.backgroundColor ?? "#A8E6CF"); const backgroundColor = project.backgroundColor ?? "#A8E6CF";
setSelectedBackground(findMatchingBackgroundPreset(backgroundColor));
setSelectedColor(backgroundColor);
setWorkspaceId(project.workspaceId); setWorkspaceId(project.workspaceId);
setExistingBackgroundPicture(project.backgroundPicture ?? ""); setExistingBackgroundPicture(project.backgroundPicture ?? "");
setStartDateDefault( setStartDateDefault(
@@ -23,6 +23,14 @@ export const BACKGROUND_PRESETS = [
"linear-gradient(45deg, #2c3e50, #4ca1af)", "linear-gradient(45deg, #2c3e50, #4ca1af)",
] as const; ] as const;
export const getPresetPrimaryColor = (preset: string) =>
preset.match(/#[0-9a-fA-F]{6}/)?.[0] ?? "#A8E6CF";
export const findMatchingBackgroundPreset = (color: string) =>
BACKGROUND_PRESETS.find(
(preset) => getPresetPrimaryColor(preset).toLowerCase() === color.toLowerCase(),
) ?? null;
type Props = { type Props = {
isActive: boolean; isActive: boolean;
onIsActiveChange: (value: boolean) => void; onIsActiveChange: (value: boolean) => void;
@@ -30,8 +38,8 @@ type Props = {
onColorChange: (color: string) => void; onColorChange: (color: string) => void;
selectedUsers: SelectedUser[]; selectedUsers: SelectedUser[];
onSelectedUsersChange: (users: SelectedUser[]) => void; onSelectedUsersChange: (users: SelectedUser[]) => void;
selectedBackground: string; selectedBackground: string | null;
onBackgroundChange: (background: string) => void; onBackgroundChange: (background: string | null) => void;
backgroundImage: File | null; backgroundImage: File | null;
onBackgroundImageChange: (file: File | null) => void; onBackgroundImageChange: (file: File | null) => void;
workspaceId: string; workspaceId: string;
@@ -154,7 +162,10 @@ const CreateProjectSidebar: FC<Props> = ({
background, background,
borderColor: selectedBackground === background ? "#000" : "#E2E8F0", borderColor: selectedBackground === background ? "#000" : "#E2E8F0",
}} }}
onClick={() => onBackgroundChange(background)} onClick={() => {
onBackgroundChange(background);
onColorChange(getPresetPrimaryColor(background));
}}
/> />
))} ))}
</div> </div>
@@ -162,7 +173,13 @@ const CreateProjectSidebar: FC<Props> = ({
<div className="mt-8"> <div className="mt-8">
<div className="text-sm mb-3">{t("taskmanager.choose_color")}</div> <div className="text-sm mb-3">{t("taskmanager.choose_color")}</div>
<WorkspaceColorPicker selectedColor={selectedColor} onChange={onColorChange} /> <WorkspaceColorPicker
selectedColor={selectedColor}
onChange={(color) => {
onBackgroundChange(findMatchingBackgroundPreset(color));
onColorChange(color);
}}
/>
</div> </div>
<div className="mt-8"> <div className="mt-8">