first commit

This commit is contained in:
Yusron alamsyah
2026-03-13 10:45:28 +07:00
commit 6bb6a1d430
568 changed files with 51753 additions and 0 deletions
+139
View File
@@ -0,0 +1,139 @@
import { defineStore } from "pinia";
import { ref, reactive, readonly } from "vue";
import type {
OdontogramData,
ToothCondition
} from "~/types/apps/medical/odontogram";
import { OdontogramMode } from "~/types/apps/medical/odontogram";
import { useDataStorage } from "~/composables/apps/medical/useDataStorage";
export const useOdontogramStore = defineStore("odontogram", () => {
const conditions = ref<ToothCondition[]>([]);
const currentMode = ref<OdontogramMode>(OdontogramMode.DEFAULT);
const metadata = ref<{ patientId: string; date: string; dentist: string }>({
patientId: "",
date: new Date().toISOString().split("T")[0],
dentist: ""
});
const { saveData, loadData } = useDataStorage();
const addCondition = (condition: ToothCondition) => {
console.log("addCondition called with:", condition);
// Remove existing condition for same tooth and surface
const index = conditions.value.findIndex(
(c) =>
c.toothNumber === condition.toothNumber &&
c.surface === condition.surface
);
if (index >= 0) {
conditions.value.splice(index, 1);
}
conditions.value.push(condition);
saveCurrentData();
};
const removeCondition = (toothNumber: string, surface?: string) => {
const index = conditions.value.findIndex(
(c) =>
c.toothNumber === toothNumber && (!surface || c.surface === surface)
);
if (index >= 0) {
conditions.value.splice(index, 1);
saveCurrentData();
}
};
const clearAllConditions = () => {
conditions.value = [];
saveCurrentData();
};
const setMode = (mode: OdontogramMode) => {
currentMode.value = mode;
saveCurrentData();
};
let isLoading = false;
const saveCurrentData = () => {
if (isLoading) {
console.log("Skipping saveCurrentData during loading");
return;
}
console.log("saveCurrentData called with conditions:", conditions.value);
const data: OdontogramData = {
conditions: conditions.value,
metadata: metadata.value,
currentMode: currentMode.value
};
saveData(data);
};
const loadStoredData = () => {
isLoading = true;
const data = loadData();
console.log("Loading stored data:", data);
if (data) {
conditions.value = data.conditions || [];
metadata.value = {
patientId: data.metadata?.patientId ?? "",
date: data.metadata?.date ?? new Date().toISOString().split("T")[0],
dentist: data.metadata?.dentist ?? ""
};
if (data.currentMode !== undefined) {
currentMode.value = data.currentMode;
}
}
isLoading = false;
};
const exportCurrentData = () => {
const data: OdontogramData = {
conditions: conditions.value,
metadata: {
patientId: metadata.value.patientId ?? "",
date: metadata.value.date,
dentist: metadata.value.dentist ?? ""
},
currentMode: currentMode.value
};
return data;
};
const importData = (data: OdontogramData) => {
conditions.value = data.conditions || [];
metadata.value = {
patientId: data.metadata?.patientId ?? "",
date: data.metadata?.date ?? new Date().toISOString().split("T")[0],
dentist: data.metadata?.dentist ?? ""
};
if (data.currentMode !== undefined) {
currentMode.value = data.currentMode;
}
saveCurrentData();
};
function setConditions(newConditions: ToothCondition[]) {
conditions.value = newConditions;
saveCurrentData();
}
return {
conditions: readonly(conditions),
currentMode: readonly(currentMode),
metadata,
addCondition,
removeCondition,
clearAllConditions,
setMode,
saveCurrentData,
loadStoredData,
exportCurrentData,
importData,
setConditions,
};
});
+37
View File
@@ -0,0 +1,37 @@
import { defineStore, createPinia } from "pinia";
import config from '../config'
const pinia = createPinia();
export const useCustomizerStore = defineStore('customizer', {
state: () => ({
Sidebar_drawer: config.Sidebar_drawer,
Customizer_drawer: config.Customizer_drawer,
mini_sidebar: config.mini_sidebar,
setHorizontalLayout: config.setHorizontalLayout, // Horizontal layout
actTheme: config.actTheme,
boxed: config.boxed,
setBorderCard: config.setBorderCard
}),
getters: {},
actions: {
SET_SIDEBAR_DRAWER() {
this.Sidebar_drawer = !this.Sidebar_drawer;
},
SET_MINI_SIDEBAR(payload: any) {
this.mini_sidebar = payload;
},
SET_CUSTOMIZER_DRAWER(payload: any) {
this.Customizer_drawer = payload;
},
SET_LAYOUT(payload: any) {
this.setHorizontalLayout = payload;
},
SET_THEME(payload: any) {
this.actTheme = payload;
},
SET_CARD_BORDER(payload: any){
this.setBorderCard = payload
}
},
});