瀏覽代碼

Add project details on hover in timesheet project select

tags/Baseline_180220205_Frontend
Wayne 11 月之前
父節點
當前提交
c494e6463b
共有 3 個檔案被更改,包括 41 行新增8 行删除
  1. +1
    -0
      src/app/api/projects/index.ts
  2. +1
    -1
      src/components/TimeLeaveModal/TimeLeaveInputTable.tsx
  3. +39
    -7
      src/components/TimesheetTable/ProjectSelect.tsx

+ 1
- 0
src/app/api/projects/index.ts 查看文件

@@ -79,6 +79,7 @@ export interface ProjectWithTasks {
id: number; id: number;
code: string; code: string;
status?: string; status?: string;
description?: string;
name: string; name: string;
tasks: Task[]; tasks: Task[];
milestones: { milestones: {


+ 1
- 1
src/components/TimeLeaveModal/TimeLeaveInputTable.tsx 查看文件

@@ -194,7 +194,7 @@ const TimeLeaveInputTable: React.FC<Props> = ({
...model, ...model,
[id]: { mode: GridRowModes.View, ignoreModifications: true }, [id]: { mode: GridRowModes.View, ignoreModifications: true },
})); }));
const editedRow = entries.find((entry) => entry.id === id);
const editedRow = entries.find((entry) => getRowId(entry) === id);
if (editedRow?._isNew) { if (editedRow?._isNew) {
setEntries((es) => es.filter((e) => getRowId(e) !== id)); setEntries((es) => es.filter((e) => getRowId(e) !== id));
} else { } else {


+ 39
- 7
src/components/TimesheetTable/ProjectSelect.tsx 查看文件

@@ -1,11 +1,13 @@
import React, { useCallback, useMemo } from "react"; import React, { useCallback, useMemo } from "react";
import { import {
Autocomplete, Autocomplete,
Box,
Checkbox, Checkbox,
Chip, Chip,
ListSubheader, ListSubheader,
MenuItem, MenuItem,
TextField, TextField,
Tooltip,
} from "@mui/material"; } from "@mui/material";
import { AssignedProject, ProjectWithTasks } from "@/app/api/projects"; import { AssignedProject, ProjectWithTasks } from "@/app/api/projects";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
@@ -184,13 +186,10 @@ const AutocompleteProjectSelect: React.FC<Props> = ({
) => { ) => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
const { key, ...rest } = params; const { key, ...rest } = params;
return (
<MenuItem
{...rest}
disableRipple
value={option.value}
key={`${option.value}--${option.label}`}
>
const childKey = `${option.value}--${option.label}`;

const content = (
<MenuItem {...rest} disableRipple value={option.value} key={childKey}>
{multiple && ( {multiple && (
<Checkbox <Checkbox
disableRipple disableRipple
@@ -202,6 +201,39 @@ const AutocompleteProjectSelect: React.FC<Props> = ({
{option.label} {option.label}
</MenuItem> </MenuItem>
); );

const associatedProject = allProjects.find(
(p) => p.id === option.value,
);

return associatedProject ? (
<Tooltip
key={childKey}
placement="right"
title={
<Box sx={{ display: "flex", flexDirection: "column", gap: 2 }}>
<Box>
<Box>{t("Project Code")}</Box>
{associatedProject.code}
</Box>
<Box>
<Box>{t("Project Name")}</Box>
{associatedProject.name}
</Box>
{associatedProject.description && (
<Box>
<Box>{t("Project Description")}</Box>
{associatedProject.description}
</Box>
)}
</Box>
}
>
{content}
</Tooltip>
) : (
content
);
}} }}
renderInput={(params) => <TextField {...params} error={error} />} renderInput={(params) => <TextField {...params} error={error} />}
/> />


Loading…
取消
儲存