Files
web-antrean/stores/antreanMasukScreenStore.js
T
2026-01-14 15:56:56 +07:00

90 lines
2.8 KiB
JavaScript

// stores/antreanMasukScreenStore.js
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
export const useAntreanMasukScreenStore = defineStore('antreanMasukScreen', () => {
// Initial antrean masuk screen items data
const antreanMasukScreenItems = ref([
{
id: 1,
namaScreen: "Layar Antrean Masuk 1",
nomorScreen: "AM-001",
loket: [1, 2], // Array of loket IDs
},
{
id: 2,
namaScreen: "Layar Antrean Masuk 2",
nomorScreen: "AM-002",
loket: [3, 4],
},
]);
// Computed
const getAntreanMasukScreenById = (id) => {
return computed(() => {
const targetId = Number(id);
return antreanMasukScreenItems.value.find((s) => Number(s.id) === targetId);
});
};
const getAllAntreanMasukScreens = computed(() => antreanMasukScreenItems.value);
// Actions
const addAntreanMasukScreen = (screenPayload) => {
// Ensure we get a valid ID even if antreanMasukScreenItems is empty
const maxId = antreanMasukScreenItems.value.length > 0
? Math.max(...antreanMasukScreenItems.value.map(s => s.id), 0)
: 0;
const newId = maxId + 1;
// Pastikan id baru tidak tertimpa payload (payload.id bisa null)
const newScreen = {
...screenPayload,
id: newId,
};
antreanMasukScreenItems.value.push(newScreen);
return { success: true, message: `Screen ${newScreen.namaScreen} berhasil ditambahkan`, data: newScreen };
};
const updateAntreanMasukScreen = (screenPayload) => {
const index = antreanMasukScreenItems.value.findIndex(s => s.id === screenPayload.id);
if (index !== -1) {
antreanMasukScreenItems.value[index] = {
...antreanMasukScreenItems.value[index],
...screenPayload,
};
return { success: true, message: `Konfigurasi ${screenPayload.namaScreen} berhasil disimpan` };
}
return { success: false, message: 'Screen tidak ditemukan' };
};
const deleteAntreanMasukScreen = (screenId) => {
const index = antreanMasukScreenItems.value.findIndex(s => s.id === screenId);
if (index !== -1) {
const screenName = antreanMasukScreenItems.value[index].namaScreen;
antreanMasukScreenItems.value.splice(index, 1);
return { success: true, message: `Screen ${screenName} berhasil dihapus` };
}
return { success: false, message: 'Screen tidak ditemukan' };
};
return {
// State
antreanMasukScreenItems,
// Computed
getAllAntreanMasukScreens,
getAntreanMasukScreenById,
// Actions
addAntreanMasukScreen,
updateAntreanMasukScreen,
deleteAntreanMasukScreen,
};
}, {
persist: {
key: 'antrean-masuk-screen-store-state',
storage: typeof window !== 'undefined' ? localStorage : undefined,
paths: ['antreanMasukScreenItems'],
},
});