make new folder for reuse ngLib add new features for datatree like change add remove rename datapoints improve pingpong
This commit is contained in:
73
src/vueLib/models/Subscriptions.ts
Normal file
73
src/vueLib/models/Subscriptions.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import type { Ref } from 'vue';
|
||||
import { reactive, ref } from 'vue';
|
||||
import { convertToSubscribe } from '../models/Subscribe';
|
||||
import type { Subscribe, RawSubs, RawSubscribe } from '../models/Subscribe';
|
||||
import type { Set } from './Set';
|
||||
|
||||
const EMPTYUUID = '00000000-0000-0000-0000-000000000000';
|
||||
export const Subscriptions = reactive<Record<string, Subscribe>>({});
|
||||
|
||||
export type TableSubscription = {
|
||||
path: string;
|
||||
value: Ref<string | number | boolean | null | undefined>;
|
||||
};
|
||||
|
||||
export function addRawSubscription(sub: RawSubscribe | Set | undefined) {
|
||||
if (sub === undefined) return;
|
||||
addSubscription(convertToSubscribe(sub as RawSubscribe));
|
||||
}
|
||||
|
||||
export function addRawSubscriptions(subs: RawSubs) {
|
||||
subs.forEach((sub) => addSubscription(convertToSubscribe(sub)));
|
||||
}
|
||||
|
||||
function addSubscription(sub: Subscribe) {
|
||||
if (EMPTYUUID === sub.uuid) {
|
||||
sub.path = 'DBM';
|
||||
}
|
||||
if (!sub.uuid) return;
|
||||
Subscriptions[sub.uuid] = sub;
|
||||
}
|
||||
|
||||
export function updateSubscription(sub: Subscribe) {
|
||||
if (!sub.uuid) return;
|
||||
Subscriptions[sub.uuid] = sub;
|
||||
}
|
||||
|
||||
export function updateSubscriptionValue(
|
||||
uuid: string,
|
||||
value: string | number | boolean | null | undefined,
|
||||
) {
|
||||
if (!uuid) return;
|
||||
if (!Subscriptions[uuid]) return;
|
||||
Subscriptions[uuid].value = ref(value);
|
||||
}
|
||||
|
||||
export function removeRawSubscription(sub: RawSubscribe | string) {
|
||||
removeSubscription(typeof sub === 'string' ? sub : sub.uuid);
|
||||
}
|
||||
|
||||
export function removeRawSubscriptions(subs: RawSubs) {
|
||||
subs.forEach((sub) => {
|
||||
removeSubscription(sub.uuid);
|
||||
});
|
||||
}
|
||||
|
||||
export function removeAllSubscriptions() {
|
||||
Object.keys(Subscriptions).forEach((key) => delete Subscriptions[key]);
|
||||
}
|
||||
|
||||
export function removeSubscription(uuid: string | undefined) {
|
||||
if (uuid === undefined) return;
|
||||
if (!Subscriptions || Subscriptions[uuid] === undefined) return;
|
||||
delete Subscriptions[uuid];
|
||||
}
|
||||
|
||||
export function findSubscriptionByPath(path: string): Subscribe | undefined {
|
||||
return Object.values(Subscriptions).find((sub) => sub.path === path);
|
||||
}
|
||||
|
||||
export function findSubscriptionByUuid(uuid: string): Subscribe | undefined {
|
||||
if (!Subscriptions[uuid]) return;
|
||||
return Subscriptions[uuid];
|
||||
}
|
Reference in New Issue
Block a user