diff --git a/scripts/remove-unused-log-imports.ts b/scripts/remove-unused-log-imports.ts index 6ef55d6a54..da9b7656b1 100644 --- a/scripts/remove-unused-log-imports.ts +++ b/scripts/remove-unused-log-imports.ts @@ -21,7 +21,6 @@ const filesToFix = [ 'src/app/ui/duration/input-duration-formly/input-duration-formly.component.ts', 'src/app/ui/inline-markdown/inline-markdown.component.ts', 'src/app/util/is-touch-only.ts', - 'src/app/util/watch-object.ts', ]; function removeUnusedLogImport(filePath: string): void { diff --git a/src/app/features/tasks/store/task.selectors.spec.ts b/src/app/features/tasks/store/task.selectors.spec.ts index 4e8c03e7fb..03f6ef2478 100644 --- a/src/app/features/tasks/store/task.selectors.spec.ts +++ b/src/app/features/tasks/store/task.selectors.spec.ts @@ -379,11 +379,6 @@ describe('Task Selectors', () => { expect(result[0].id).toBe('task6'); }); - it('should select all tasks due and overdue', () => { - const result = fromSelectors.selectAllTasksDueAndOverdue(mockState); - expect(result.length).toBe(2); // task3 (due today) and task6 (overdue) - }); - it('should select undone overdue tasks', () => { const result = fromSelectors.selectUndoneOverdue(mockState); expect(result.length).toBe(1); @@ -828,13 +823,6 @@ describe('Task Selectors', () => { expect(projectIds).toContain('project2'); expect(projectIds).toContain('project3'); }); - - it('should select tasks worked on or done for a day', () => { - const result = fromSelectors.selectTasksWorkedOnOrDoneFlat(mockState, { - day: today, - }); - expect(result?.length).toBe(2); // task2 (done and worked on) and subtask2 (done) - }); }); // Repeatable task selectors @@ -911,16 +899,6 @@ describe('Task Selectors', () => { expect(result.length).toBe(1); expect(result[0].id).toBe('overdueOnToday'); }); - - it('selectAllTasksDueAndOverdue should use Set for today tag filtering', () => { - const result = fromSelectors.selectAllTasksDueAndOverdue(mockState); - // Should include task3 (due today) and task6 (overdue yesterday) - // task2 is excluded because it's in TODAY_TAG.taskIds (ordering list) AND isDone=true - expect(result.map((t) => t.id)).toEqual( - jasmine.arrayContaining(['task3', 'task6']), - ); - expect(result.find((t) => t.id === 'task2')).toBeUndefined(); - }); }); // mapSubTasksToTasks optimization tests diff --git a/src/app/features/tasks/store/task.selectors.ts b/src/app/features/tasks/store/task.selectors.ts index cf85360f57..63fa3aa6d4 100644 --- a/src/app/features/tasks/store/task.selectors.ts +++ b/src/app/features/tasks/store/task.selectors.ts @@ -11,16 +11,12 @@ import { import { taskAdapter } from './task.adapter'; import { devError } from '../../../util/dev-error'; import { isDBDateStr } from '../../../util/get-db-date-str'; -import { TODAY_TAG } from '../../tag/tag.const'; import { IssueProvider, isPluginIssueProvider } from '../../issue/issue.model'; import { selectArchivedProjectIds, selectHiddenProjectIds, } from '../../project/store/project.selectors'; -import { - selectTagFeatureState, - selectTodayTagTaskIds, -} from '../../tag/store/tag.reducer'; +import { selectTodayTagTaskIds } from '../../tag/store/tag.reducer'; import { selectStartOfNextDayDiffMs, selectTodayStr, @@ -331,26 +327,6 @@ export const selectOverdueTasksWithSubTasks = createSelector( }, ); -export const selectAllTasksDueAndOverdue = createSelector( - selectTaskFeatureState, - selectTagFeatureState, - selectTodayStr, - (s, tagState, todayStr): Task[] => { - const todayTaskIdSet = new Set(tagState.entities[TODAY_TAG.id]?.taskIds); - return s.ids - .map((id) => s.entities[id]) - .filter( - (task): task is Task => - !!task && - // Note: String comparison works correctly here because dueDay is in YYYY-MM-DD format - // which is lexicographically sortable. This avoids timezone conversion issues. - !!task.dueDay && - task.dueDay <= todayStr && - !todayTaskIdSet.has(task.id), - ); - }, -); - export const selectSelectedTaskId = createSelector( selectTaskFeatureState, (state) => state.selectedTaskId, @@ -577,26 +553,6 @@ export const selectAllCalendarIssueTasks = createSelector( (tasks: Task[]): Task[] => tasks.filter(isCalendarIssueTask), ); -// intentionally unfiltered: seems unused -export const selectTasksWorkedOnOrDoneFlat = createSelector( - selectAllTasks, - (tasks: Task[], props: { day: string }) => { - if (!props) { - return null; - } - - const todayStr = props.day; - return tasks.filter( - (t: Task) => - !!t && - (t.isDone || - (t.timeSpentOnDay && - t.timeSpentOnDay?.[todayStr] && - t.timeSpentOnDay?.[todayStr] > 0)), - ); - }, -); - export const selectTasksDueForDay = createSelector( selectAllTasksInActiveProjects, (tasks: Task[], props: { day: string }): TaskWithDueDay[] => { diff --git a/src/app/features/tasks/task-context-menu/task-context-menu-inner/task-context-menu-inner.component.ts b/src/app/features/tasks/task-context-menu/task-context-menu-inner/task-context-menu-inner.component.ts index 098e4699fc..dd68ed51b5 100644 --- a/src/app/features/tasks/task-context-menu/task-context-menu-inner/task-context-menu-inner.component.ts +++ b/src/app/features/tasks/task-context-menu/task-context-menu-inner/task-context-menu-inner.component.ts @@ -165,13 +165,6 @@ export class TaskContextMenuInnerComponent implements AfterViewInit, OnDestroy { ); toggleTagList = this._tagService.tagsNoMyDayAndNoListSorted; - // isShowMoveFromAndToBacklogBtns$: Observable = this._task$.pipe( - // take(1), - // switchMap((task) => - // task.projectId ? this._projectService.getByIdOnce$(task.projectId) : EMPTY, - // ), - // map((project) => project.isEnableBacklog), - // ); isShowMoveFromAndToBacklogBtns$: Observable = this._workContextService.activeWorkContext$.pipe( take(1), @@ -326,7 +319,6 @@ export class TaskContextMenuInnerComponent implements AfterViewInit, OnDestroy { const btns = Array.from( t?.closest('.quick-access')?.querySelectorAll('button') || [], ); - // const btns = Array.from(t?.querySelectorAll('button') || []); const currentIndex = btns.indexOf(t as HTMLButtonElement); @@ -728,11 +720,6 @@ export class TaskContextMenuInnerComponent implements AfterViewInit, OnDestroy { nextFirstDayOfWeek.setDate(nextFirstDayOfWeek.getDate() + dayOffset); this._schedule(nextFirstDayOfWeek); break; - // case 4: - // const nextMonth = tDate; - // nextMonth.setMonth(nextMonth.getMonth() + 1); - // this._schedule(nextMonth); - // break; } } diff --git a/src/app/features/tasks/task/task.component.ts b/src/app/features/tasks/task/task.component.ts index a8724f4b48..cd87f40ee3 100644 --- a/src/app/features/tasks/task/task.component.ts +++ b/src/app/features/tasks/task/task.component.ts @@ -918,15 +918,6 @@ export class TaskComponent implements OnDestroy, AfterViewInit { setTimeout(() => { this.tagToggleMenuList()?.openMenu(); }); - - // this._matDialog - // .open(DialogEditTagsForTaskComponent, { - // data: { - // task: this.task(), - // }, - // }) - // .afterClosed() - // .subscribe(() => this.focusSelf()); } toggleTag(tagId: string): void { diff --git a/src/app/root-store/meta/task-shared-meta-reducers/task-shared-helpers.ts b/src/app/root-store/meta/task-shared-meta-reducers/task-shared-helpers.ts index 9e1d8f4276..d158ab1172 100644 --- a/src/app/root-store/meta/task-shared-meta-reducers/task-shared-helpers.ts +++ b/src/app/root-store/meta/task-shared-meta-reducers/task-shared-helpers.ts @@ -64,13 +64,6 @@ export const getTag = (state: RootState, tagId: string): Tag => { return tag as Tag; }; -/** - * Gets a tag entity from state, or undefined if it doesn't exist. - * Use this when the tag may not exist (e.g., during remote sync). - */ -export const getTagOrUndefined = (state: RootState, tagId: string): Tag | undefined => - state[TAG_FEATURE_NAME].entities[tagId] as Tag | undefined; - /** * Gets a project entity from state. Throws if project doesn't exist. * Callers should check existence before calling if project may not exist. diff --git a/src/app/util/create-sha-1-hash.ts b/src/app/util/create-sha-1-hash.ts deleted file mode 100644 index 2d0017f51f..0000000000 --- a/src/app/util/create-sha-1-hash.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { WebCryptoNotAvailableError } from '../sync/sync-exports'; -import { alertDialog } from './native-dialogs'; - -export const createSha1Hash = (str: string): Promise => { - console.time('createSha1Hash'); - const encoder = new TextEncoder(); - const dataBuffer = encoder.encode(str); - if (!crypto.subtle) { - alertDialog('WebCrypto API (subtle.digest) is only supported in secure contexts.'); - throw new WebCryptoNotAvailableError(); - } - - return crypto.subtle.digest('SHA-1', dataBuffer).then((hash) => { - const hashArray = Array.from(new Uint8Array(hash)); - const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join(''); - console.timeEnd('createSha1Hash'); - return hashHex; - }); -}; diff --git a/src/app/util/numeric-converter.ts b/src/app/util/numeric-converter.ts deleted file mode 100644 index 4b36faa202..0000000000 --- a/src/app/util/numeric-converter.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable @typescript-eslint/naming-convention */ -const arabicNumberMap = { - '١': '1', - '٢': '2', - '٣': '3', - '٤': '4', - '٥': '5', - '٦': '6', - '٧': '7', - '٨': '8', - '٩': '9', - '٠': '0', -}; - -export const convertToWesternArabic = (data: string): string => { - return _replaceHinduArabic(data); -}; - -const _replaceHinduArabic = (val: string): string => - val.replace(/[١٢٣٤٥٦٧٨٩٠]/g, (match) => { - return (arabicNumberMap as any)[match]; - }); diff --git a/src/app/util/omit.ts b/src/app/util/omit.ts deleted file mode 100644 index 6dec8772cd..0000000000 --- a/src/app/util/omit.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const omit = ( - obj: T, - keyToOmit: K, -): Omit => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { [keyToOmit]: _, ...rest } = obj; - return rest; -}; diff --git a/src/app/util/watch-object.ts b/src/app/util/watch-object.ts deleted file mode 100644 index ace1a6b598..0000000000 --- a/src/app/util/watch-object.ts +++ /dev/null @@ -1,14 +0,0 @@ -// TODO untested - -export const watchObject = ( - obj: T, - onChange: (prop: string, value: unknown) => void, -): T => - new Proxy(obj, { - // eslint-disable-next-line prefer-arrow/prefer-arrow-functions - set(target, prop, value): boolean { - // Log.log(`Property ${String(prop)} changed from ${target[prop]} to ${value}`); - onChange(String(prop), value); - return Reflect.set(target, prop, value); - }, - });