Skip to content

Commit

Permalink
Refactoring of services structures, start on context menu service
Browse files Browse the repository at this point in the history
  • Loading branch information
meshosk committed Jan 9, 2024
1 parent 35b79b6 commit 422d10d
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 52 deletions.
17 changes: 17 additions & 0 deletions src/components/services/BaseService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
export abstract class BaseService<T> {

// yeah, neat workaround, TS do not handle generics+static well
// In TS static attribs are common for all children
private static _services:Map<string, object> = new Map();
constructor() {
BaseService._services.set(this.constructor.name, this);
}

/**
* Static method for easy injection
*/
static inject() {

return this._services.get(this.name);
}
}
15 changes: 2 additions & 13 deletions src/components/services/ConnectionLockService.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
import {watch, inject} from "vue";
import type {DraggableOver} from "@/components/parts/common/DraggableOver";
export class ConnectionLockService {
import {BaseService} from "@/components/services/BaseService";
export class ConnectionLockService extends BaseService<ConnectionLockService>{

private readonly _watchers: Map<MapKey, WatcherItem> = new Map<MapKey, WatcherItem>();

private static _service :ConnectionLockService;
/**
* Static method for easy injection
*/
static inject() : ConnectionLockService {
return this._service;
}

constructor() {
ConnectionLockService._service = this;
}

lock( a: DraggableOver, b: DraggableOver) {
this.cleanInactiveLocks();
let key = this.findWatcherKey( a, b);
Expand Down
5 changes: 5 additions & 0 deletions src/components/services/ContextMenuService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import {BaseService} from "./BaseService";
export class ContextMenuService extends BaseService<ContextMenuService> {


}
14 changes: 3 additions & 11 deletions src/components/services/EditorService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,19 @@ import {ref, inject, toRaw} from "vue";
import * as Vue from "@vue/reactivity"
import {CircuitPart, ConnectPoint, HighlightType} from "@/components/parts/common";
import {InputJackModel} from "@/components/parts/models";
import {BaseService} from "@/components/services/BaseService";

export class EditorService {
export class EditorService extends BaseService<EditorService>{

private readonly _parts :Vue.Ref<Vue.UnwrapRef<CircuitPart[]>>;

private readonly _partsNormal :Vue.Ref<Vue.UnwrapRef<CircuitPart[]>> = ref([])
private readonly _partsPrioritized :Vue.Ref<Vue.UnwrapRef<CircuitPart[]>> = ref([])

constructor() {
super();
this._parts = ref([]);
EditorService._service = this;
}

private static _service :EditorService;
/**
* Static method for easy injection
*/
static inject() : EditorService {
return this._service;
}

public addPart(partName :string){
// @ts-ignore
let instance = new modelRef[partName]();
Expand Down
15 changes: 2 additions & 13 deletions src/components/services/MouseServise.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import {ref, inject, toRaw} from 'vue'
import {DraggableOver, Movable, Clickable} from "@/components/parts/common";
import {EditorService} from "@/components/services/EditorService";
import {BaseService} from "@/components/services/BaseService";

export class MouseService {
export class MouseService extends BaseService<MouseService>{

/**
* List of all dragged items - for future
Expand Down Expand Up @@ -38,18 +39,6 @@ export class MouseService {
*/
private _isDown = false;

private static _service :MouseService;
/**
* Static method for easy injection
*/
static inject() : MouseService {
return this._service;
}

constructor() {
MouseService._service = this;
}

/**
* Using shady-around-vue-play to get over which draggable component is set position. Dragged
* item is ignored. This should be changed to use Vue API in future.
Expand Down
18 changes: 3 additions & 15 deletions src/components/services/SerializationService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,9 @@ import {getCurrentInstance, inject} from 'vue'
import {CircuitPart, ConnectionLockService, ConnectPoint} from "@/components/parts/common";
import {EditorService} from "@/components/services/EditorService";
import {CableModel} from "@/components/parts/models";
export class SerializationService {


private static _service :SerializationService
/**
* Static method for easy injection
*/
static inject() : SerializationService {
return this._service;
}


constructor() {
SerializationService._service = this;
}
import {BaseService} from "@/components/services/BaseService";
export class SerializationService extends BaseService<SerializationService>{


public saveToFile(parts :CircuitPart[]) {

Expand Down
2 changes: 2 additions & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {MouseService} from "@/components/services/MouseServise";
import {EditorService} from "@/components/services/EditorService";
import {ConnectionLockService} from "@/components/services/ConnectionLockService";
import {SerializationService} from "@/components/services/SerializationService";
import {ContextMenuService} from "@/components/services/ContextMenuService";

const app = createApp(App)

Expand All @@ -18,6 +19,7 @@ app.provide("MouseService", new MouseService());
app.provide("EditorService", new EditorService());
app.provide("ConnectionLockService", new ConnectionLockService());
app.provide("SerializationService", new SerializationService());
app.provide("ContextMenuService", new ContextMenuService());

app.config.errorHandler = (err, instance, info) => {
console.log(err);
Expand Down

0 comments on commit 422d10d

Please sign in to comment.