94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
// stores/anjunganStore.js
|
|
import { defineStore } from 'pinia';
|
|
import { ref, computed } from 'vue';
|
|
|
|
export const useAnjunganStore = defineStore('anjungan', () => {
|
|
// Seed: existing static Anjungan page sebagai id 1
|
|
const anjunganItems = ref([
|
|
{
|
|
id: 1,
|
|
namaAnjungan: 'Anjungan Reguler',
|
|
jenisPasien: 'Reguler',
|
|
klinik: ['AK', 'AN', 'BD', 'GR', 'GM', 'GZ', 'HO', 'IP', 'JT', 'JW', 'KD', 'KK', 'KM', 'KO', 'MC', 'MT', 'ON', 'PR', 'RD', 'RM', 'RT', 'SR', 'TH'],
|
|
},
|
|
{
|
|
id: 2,
|
|
namaAnjungan: 'Anjungan Eksekutif',
|
|
jenisPasien: 'Eksekutif',
|
|
klinik: ['AK', 'AN', 'BD', 'GM', 'GR', 'GZ', 'HO', 'IP', 'JT', 'JW', 'KD', 'KK', 'KM', 'KO', 'MC', 'MT', 'ON', 'PR', 'RD', 'RM', 'RT', 'SR', 'TH'],
|
|
},
|
|
]);
|
|
|
|
const getAllAnjungan = computed(() => anjunganItems.value);
|
|
|
|
const getAnjunganById = (id) => {
|
|
return computed(() => {
|
|
const target = Number(id);
|
|
return anjunganItems.value.find((a) => Number(a.id) === target) || null;
|
|
});
|
|
};
|
|
|
|
const addAnjungan = (payload) => {
|
|
const maxId =
|
|
anjunganItems.value.length > 0
|
|
? Math.max(...anjunganItems.value.map((a) => Number(a.id) || 0))
|
|
: 0;
|
|
const newId = maxId + 1;
|
|
const newItem = {
|
|
...payload,
|
|
id: newId,
|
|
};
|
|
anjunganItems.value.push(newItem);
|
|
return {
|
|
success: true,
|
|
message: `Anjungan ${newItem.namaAnjungan} berhasil ditambahkan`,
|
|
data: newItem,
|
|
};
|
|
};
|
|
|
|
const updateAnjungan = (payload) => {
|
|
const idx = anjunganItems.value.findIndex(
|
|
(a) => Number(a.id) === Number(payload.id)
|
|
);
|
|
if (idx === -1) {
|
|
return { success: false, message: 'Anjungan tidak ditemukan' };
|
|
}
|
|
anjunganItems.value[idx] = {
|
|
...anjunganItems.value[idx],
|
|
...payload,
|
|
};
|
|
return {
|
|
success: true,
|
|
message: `Anjungan ${payload.namaAnjungan} berhasil diperbarui`,
|
|
};
|
|
};
|
|
|
|
const deleteAnjungan = (id) => {
|
|
const idx = anjunganItems.value.findIndex(
|
|
(a) => Number(a.id) === Number(id)
|
|
);
|
|
if (idx === -1) {
|
|
return { success: false, message: 'Anjungan tidak ditemukan' };
|
|
}
|
|
const name = anjunganItems.value[idx].namaAnjungan;
|
|
anjunganItems.value.splice(idx, 1);
|
|
return { success: true, message: `Anjungan ${name} berhasil dihapus` };
|
|
};
|
|
|
|
return {
|
|
anjunganItems,
|
|
getAllAnjungan,
|
|
getAnjunganById,
|
|
addAnjungan,
|
|
updateAnjungan,
|
|
deleteAnjungan,
|
|
};
|
|
}, {
|
|
persist: {
|
|
key: 'anjungan-store-state',
|
|
storage: typeof window !== 'undefined' ? localStorage : undefined,
|
|
paths: ['anjunganItems'],
|
|
},
|
|
});
|
|
|