feat: indicates not saved changes on steps editor's screen

This commit is contained in:
Takeshi Kimata
2024-08-04 12:45:20 +09:00
parent ed99d5012f
commit be5f2840d3
2 changed files with 49 additions and 45 deletions

View File

@@ -225,24 +225,27 @@ export default function CaseEditor({
</Tooltip> </Tooltip>
<h3 className="font-bold ms-2">{testCase.title}</h3> <h3 className="font-bold ms-2">{testCase.title}</h3>
</div> </div>
<Button <div className="flex items-center">
startContent={<Save size={16} />} {isDirty && <Circle size={8} color="#525252" fill="#525252" className="me-1" />}
size="sm" <Button
isDisabled={!context.isProjectDeveloper(Number(projectId))} startContent={<Save size={16} />}
color="primary" size="sm"
isLoading={isUpdating} isDisabled={!context.isProjectDeveloper(Number(projectId))}
onPress={async () => { color="primary"
setIsUpdating(true); isLoading={isUpdating}
await updateCase(context.token.access_token, testCase); onPress={async () => {
if (testCase.Steps) { setIsUpdating(true);
await updateSteps(context.token.access_token, Number(caseId), testCase.Steps); await updateCase(context.token.access_token, testCase);
} if (testCase.Steps) {
setIsUpdating(false); await updateSteps(context.token.access_token, Number(caseId), testCase.Steps);
setIsDirty(false); }
}} setIsUpdating(false);
> setIsDirty(false);
{isUpdating ? messages.updating : messages.update} }}
</Button> >
{isUpdating ? messages.updating : messages.update}
</Button>
</div>
</div> </div>
<div className="p-5"> <div className="p-5">
@@ -375,7 +378,7 @@ export default function CaseEditor({
</div> </div>
) : ( ) : (
<div> <div>
<div className="flex items-center"> <div className="flex items-center mb-3">
<h6 className="font-bold">{messages.steps}</h6> <h6 className="font-bold">{messages.steps}</h6>
<Button <Button
startContent={<Plus size={16} />} startContent={<Plus size={16} />}

View File

@@ -1,4 +1,4 @@
import { Textarea, Button, Tooltip } from '@nextui-org/react'; import { Textarea, Button, Tooltip, Avatar } from '@nextui-org/react';
import { CaseMessages, StepType } from '@/types/case'; import { CaseMessages, StepType } from '@/types/case';
import { Plus, Trash } from 'lucide-react'; import { Plus, Trash } from 'lucide-react';
@@ -25,32 +25,33 @@ export default function StepsEditor({ isDisabled, steps, onStepUpdate, onStepPlu
return ( return (
<> <>
{filteredSteps.map((step, index) => ( {filteredSteps.map((step, index) => (
<div key={index} className="flex"> <div key={index} className="flex items-center my-1">
<div className="bg-neutral-50 dark:bg-neutral-600 rounded-full flex items-center justify-center min-w-unit-8 w-unit-8 h-unit-8 mt-3 me-2"> <Avatar className="me-2" size="sm" name={step.caseSteps.stepNo.toString()} />
<div>{step.caseSteps.stepNo}</div> <div key={step.id} className="grow flex gap-2">
<div className="w-1/2">
<Textarea
size="sm"
variant="bordered"
label={messages.detailsOfTheStep}
value={step.step}
onValueChange={(changeValue) => {
onStepUpdate(step.id, { ...step, step: changeValue, editState: 'changed' });
}}
/>
</div>
<div className="w-1/2">
<Textarea
size="sm"
variant="bordered"
label={messages.expectedResult}
value={step.result}
onValueChange={(changeValue) => {
onStepUpdate(step.id, { ...step, result: changeValue, editState: 'changed' });
}}
/>
</div>
</div> </div>
<Textarea <div className="flex flex-col">
size="sm"
variant="bordered"
label={messages.detailsOfTheStep}
value={step.step}
onValueChange={(changeValue) => {
onStepUpdate(step.id, { ...step, step: changeValue, editState: 'changed' });
}}
className="mt-3 me-1"
/>
<Textarea
size="sm"
variant="bordered"
label={messages.expectedResult}
value={step.result}
onValueChange={(changeValue) => {
onStepUpdate(step.id, { ...step, result: changeValue, editState: 'changed' });
}}
className="mt-3 ms-1"
/>
<div className="mt-3 ms-1">
<Tooltip content={messages.deleteThisStep} placement="left"> <Tooltip content={messages.deleteThisStep} placement="left">
<Button <Button
isIconOnly isIconOnly