ytptube/ui/app/composables/useDirtyState.ts

20 lines
525 B
TypeScript

import { computed, ref, toValue, type MaybeRefOrGetter } from 'vue';
const serializeDirtyValue = <T>(value: T): string => JSON.stringify(toValue(value));
export const useDirtyState = <T>(source: MaybeRefOrGetter<T>) => {
const snapshot = ref<string>('');
const markClean = (): void => {
snapshot.value = serializeDirtyValue(toValue(source));
};
const isDirty = computed<boolean>(() => {
return snapshot.value !== serializeDirtyValue(toValue(source));
});
return {
isDirty,
markClean,
};
};