mirror of
https://github.com/sechan100/daily-routine-2.git
synced 2026-07-22 05:37:51 +00:00
fix: routine delete를 finish로 변경
routine 파일은 삭제하지 않고, 완료상태로 변경하는 형태로 변경
This commit is contained in:
parent
072a3953ab
commit
05fe3d3493
6 changed files with 33 additions and 24 deletions
|
|
@ -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의 달의 마지막 날짜로 치환한다.
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ export type RoutineProperties = {
|
|||
activeCriteria: "week" | "month";
|
||||
daysOfWeek: DayOfWeek[];
|
||||
daysOfMonth: number[];
|
||||
finished: boolean;
|
||||
};
|
||||
|
||||
export type RoutineGroup = RoutineElement & {
|
||||
|
|
|
|||
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ export const createNewRoutine = (): Routine => {
|
|||
activeCriteria: "week",
|
||||
daysOfWeek: Day.getDaysOfWeek(),
|
||||
daysOfMonth: [Day.now().date],
|
||||
finished: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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 (
|
||||
<>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue