Skip to content

Commit

Permalink
refactor: Remove dependency StatusRegistry.ts > Task.ts
Browse files Browse the repository at this point in the history
This in turn removes the cyclic dependencies:

compareByDateConfig/Settings.ts > Config/StatusSettings.ts > StatusRegistry.ts > Task.ts
compareByDateConfig/Settings.ts > Config/StatusSettings.ts > StatusRegistry.ts > Task.ts > DateFallback.ts
compareByDateTask.ts > DateFallback.ts
compareByDateConfig/Settings.ts > Config/StatusSettings.ts > StatusRegistry.ts > Task.ts > TaskLineRenderer.ts
compareByDateConfig/Settings.ts > Config/StatusSettings.ts > StatusRegistry.ts > Task.ts > TaskLineRenderer.ts > File.ts

See #1591
  • Loading branch information
claremacrae committed Jan 27, 2023
1 parent 8bb1b7a commit 14d59e0
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 20 deletions.
5 changes: 4 additions & 1 deletion src/Config/SettingsTab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,10 @@ export class SettingsTab extends PluginSettingTab {
.setCta()
.onClick(async () => {
const tasks = this.plugin.getTasks();
const unknownStatuses = StatusRegistry.getInstance().findUnknownStatuses(tasks!);
const allStatuses = tasks!.map((task) => {
return task.status;
});
const unknownStatuses = StatusRegistry.getInstance().findUnknownStatuses(allStatuses);
if (unknownStatuses.length === 0) {
return;
}
Expand Down
13 changes: 4 additions & 9 deletions src/StatusRegistry.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Status } from './Status';
import { StatusConfiguration, StatusType } from './StatusConfiguration';
import type { Task } from './Task';

/**
* Tracks all the registered statuses a task can have.
Expand Down Expand Up @@ -187,19 +186,15 @@ export class StatusRegistry {
}

/**
* Find any statuses in the given tasks that are not known to this registry.
* Find any statuses in the given list that are not known to this registry.
* This can be used to add all unknown status types to the settings,
* to save users from having to do that manually.
*
* Statuses are returned in the order that they are first found in the
* supplied tasks.
* @param tasks
* supplied list.
* @param allStatuses
*/
public findUnknownStatuses(tasks: Task[]): Status[] {
const allStatuses = tasks.map((task) => {
return task.status;
});

public findUnknownStatuses(allStatuses: Status[]): Status[] {
const unknownStatuses = allStatuses.filter((s) => {
return !this.hasSymbol(s.symbol);
});
Expand Down
19 changes: 9 additions & 10 deletions tests/StatusRegistry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { Status } from '../src/Status';
import { StatusConfiguration, StatusType } from '../src/StatusConfiguration';
import { Task } from '../src/Task';
import * as TestHelpers from './TestHelpers';
import { TaskBuilder } from './TestingTools/TaskBuilder';

jest.mock('obsidian');
window.moment = moment;
Expand Down Expand Up @@ -278,20 +277,20 @@ describe('StatusRegistry', () => {
expect(registry.bySymbol('!').type).toEqual(StatusType.EMPTY);
expect(registry.bySymbol('X').type).toEqual(StatusType.EMPTY);
expect(registry.bySymbol('d').type).toEqual(StatusType.EMPTY);
const tasks = [
new TaskBuilder().statusValues('!', 'Unknown', 'X', false, StatusType.TODO).build(),
new TaskBuilder().statusValues('X', 'Unknown', '!', false, StatusType.DONE).build(),
new TaskBuilder().statusValues('d', 'Unknown', '!', false, StatusType.IN_PROGRESS).build(),
const allStatuses = [
new Status(new StatusConfiguration('!', 'Unknown', 'X', false, StatusType.TODO)),
new Status(new StatusConfiguration('X', 'Unknown', '!', false, StatusType.DONE)),
new Status(new StatusConfiguration('d', 'Unknown', '!', false, StatusType.IN_PROGRESS)),
// Include some tasks with duplicate statuses, to make sure duplicates are discarded
new TaskBuilder().statusValues('!', 'Unknown', 'X', false, StatusType.TODO).build(),
new TaskBuilder().statusValues('X', 'Unknown', '!', false, StatusType.DONE).build(),
new TaskBuilder().statusValues('d', 'Unknown', '!', false, StatusType.IN_PROGRESS).build(),
new Status(new StatusConfiguration('!', 'Unknown', 'X', false, StatusType.TODO)),
new Status(new StatusConfiguration('X', 'Unknown', '!', false, StatusType.DONE)),
new Status(new StatusConfiguration('d', 'Unknown', '!', false, StatusType.IN_PROGRESS)),
// Check that it does not add copies of any core statuses
new TaskBuilder().statusValues('-', 'Unknown', '!', false, StatusType.IN_PROGRESS).build(),
new Status(new StatusConfiguration('-', 'Unknown', '!', false, StatusType.IN_PROGRESS)),
];

// Act
const unknownStatuses = registry.findUnknownStatuses(tasks);
const unknownStatuses = registry.findUnknownStatuses(allStatuses);

// Assert
expect(unknownStatuses.length).toEqual(3);
Expand Down

0 comments on commit 14d59e0

Please sign in to comment.