fix: routine delete를 finish로 변경

routine 파일은 삭제하지 않고, 완료상태로 변경하는 형태로 변경
This commit is contained in:
sechan100 2024-12-25 19:28:21 +09:00
parent 072a3953ab
commit 05fe3d3493
6 changed files with 33 additions and 24 deletions

View file

@ -91,16 +91,26 @@ const validateRoutineProperties = (p: any): Result<RoutineProperties, string> =>
return propsErr('daysOfMonth', p.daysOfMonth);
}
if(
'finished' in p &&
typeof p.finished === 'boolean'
){
//
} else {
return propsErr('finished', p.finished);
}
return ok(p as RoutineProperties);
}
/**
* NOTE: daysOfWeek와 daysOfMonth를 .
* - daysOfMonth가 0 .
* routine의 properties들을 , day에 .
*/
const isDueTo = (routine: Routine, day: Day): boolean => {
const p = routine.properties;
if(p.finished) return false;
if(p.activeCriteria === "month"){
const days = Array.from(p.daysOfMonth);
// 0이 존재하는 경우, 0을 매개받은 day의 달의 마지막 날짜로 치환한다.

View file

@ -30,6 +30,7 @@ export type RoutineProperties = {
activeCriteria: "week" | "month";
daysOfWeek: DayOfWeek[];
daysOfMonth: number[];
finished: boolean;
};
export type RoutineGroup = RoutineElement & {

View file

@ -32,7 +32,7 @@ export interface RoutineQuery {
}
export interface RoutineRepository extends RoutineQuery {
persist(entity: Routine): Promise<boolean>;
delete(routineName: string): Promise<void>;
finish(routineName: string): Promise<void>;
changeName(originalName: string, newName: string): Promise<void>;
update(routine: Routine): Promise<Routine>;
updateAll(routines: Routine[]): Promise<Routine[]>;
@ -67,13 +67,10 @@ export const routineRepository: RoutineRepository = {
}
},
async delete(routineName: string){
const composed = compose(
fileAccessor.deleteFile,
fileAccessor.loadFile,
ROUTINE_PATH
);
await composed(routineName);
async finish(routineName: string){
const routine = await routineRepository.load(routineName);
routine.properties.finished = true;
await routineRepository.update(routine);
},
async changeName(originalName: string, newName: string){

View file

@ -13,6 +13,7 @@ export const createNewRoutine = (): Routine => {
activeCriteria: "week",
daysOfWeek: Day.getDaysOfWeek(),
daysOfMonth: [Day.now().date],
finished: false
}
}
}

View file

@ -19,18 +19,18 @@ export const RoutineTaskWidget = React.memo(({ task, parent }: RoutineTaskProps)
const { mergeNotes } = useRoutineMutationMerge();
const { note, setNote } = useRoutineNote();
const deleteRoutine = useCallback(async () => {
const deleteConfirm = await doConfirm({
title: "Delete Routine",
confirmText: "Delete",
description: `Are you sure you want to delete '${task.name}'?`,
confirmBtnVariant: "destructive"
const finishRoutine = useCallback(async () => {
const finishConfirm = await doConfirm({
title: "Finish Routine",
confirmText: "Finish",
description: `Are you sure you want to finish the routine ${task.name}?`,
confirmBtnVariant: "accent"
})
if(!deleteConfirm) return;
if(!finishConfirm) return;
await routineRepository.delete(task.name);
await routineRepository.finish(task.name);
mergeNotes();
new Notice(`Routine ${task.name} deleted.`);
new Notice(`Routine ${task.name} has been finished 🪄`);
}, [mergeNotes, task.name])
const onOptionMenu = useCallback((m: Menu) => {
@ -51,11 +51,11 @@ export const RoutineTaskWidget = React.memo(({ task, parent }: RoutineTaskProps)
});
})
m.addItem(i => {
i.setTitle("Delete");
i.setIcon("trash");
i.onClick(deleteRoutine);
i.setTitle("Finish");
i.setIcon("alarm-clock-off");
i.onClick(finishRoutine);
})
}, [RoutineOptionModal, deleteRoutine, note, setNote, task.name])
}, [RoutineOptionModal, finishRoutine, note, setNote, task.name])
return (
<>

View file

@ -11,7 +11,7 @@ export const deleteGroup = async (note: RoutineNote, groupName: string, deleteSu
if(deleteSubTasks){
const deleteTargets = routines.filter(routine => routine.properties.group === groupName);
for(const target of deleteTargets){
await routineRepository.delete(target.name);
await routineRepository.finish(target.name);
}
} else {
const ungroupTarget = routines.filter(routine => routine.properties.group === groupName);