Files
gulermak_metro/lib/dataStore.ts
Şahan Hasret 08c426f97b Ana Sayfa Fix
2025-11-18 15:19:50 +03:00

197 lines
6.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Veri yönetimi için localStorage tabanlı store
import { newsData, type NewsItem } from '@/data/news';
import { mediaData, type MediaItem } from '@/data/media';
import { documentsData, type Document } from '@/data/documents';
import { metroStations, type MetroStation } from '@/data/metroStations';
export interface SliderItem {
id: number;
title: string;
description: string;
buttonText: string;
buttonLink: string;
active: boolean;
}
// Default slider data
export const defaultSliderData: SliderItem[] = [
{
id: 1,
title: 'Ankara Metro Altyapı Projelerinde Öncü Çözümler',
description: 'Ankara Büyükşehir Belediyesi ile birlikte, modern teknoloji ve mühendislik uzmanlığımızla başkentin ulaşım ağını inşa ediyor, geleceğin metro sistemlerini bugünden hayata geçiriyoruz.',
buttonText: 'Detayları Gör',
buttonLink: '#proje-detay',
active: true
},
{
id: 2,
title: 'A2 Metro Hattı İnşaatında Son Aşamaya Gelindi',
description: '15 istasyonlu A2 Metro Hattı projemiz %75 tamamlandı. 2026 yılında hizmete açılacak modern metro hattımız, günlük 300 bin yolcuya hizmet verecek.',
buttonText: 'İlerlemeyi İzle',
buttonLink: '#metro-hatti',
active: true
},
{
id: 3,
title: 'Çevre Dostu Metro Teknolojileri',
description: 'Yenilenebilir enerji kaynakları ve sürdürülebilir inşaat teknikleri ile çevre dostu metro projelerine imza atıyoruz. Karbon emisyonunu %40 azaltan yenilikçi çözümlerimiz.',
buttonText: 'Yeşil Projeler',
buttonLink: '#cevre',
active: true
},
{
id: 4,
title: 'Güvenli İnşaat, Güvenli Gelecek',
description: 'ISO 45001 sertifikalı iş güvenliği sistemlerimiz ile 2000+ çalışanımızın güvenliğini en üst düzeyde tutuyoruz. Sıfır iş kazası hedefiyle çalışıyoruz.',
buttonText: 'Güvenlik Önlemleri',
buttonLink: '#guvenlik',
active: true
}
];
// LocalStorage keys
const KEYS = {
SLIDER: 'a2metro_slider',
NEWS: 'a2metro_news',
MEDIA: 'a2metro_media',
DOCUMENTS: 'a2metro_documents',
METRO_STATIONS: 'a2metro_stations',
};
// Helper functions
const isBrowser = typeof window !== 'undefined';
export const dataStore = {
// Slider
getSlider: (): SliderItem[] => {
if (!isBrowser) return defaultSliderData;
const stored = localStorage.getItem(KEYS.SLIDER);
return stored ? JSON.parse(stored) : defaultSliderData;
},
setSlider: (data: SliderItem[]) => {
if (isBrowser) {
localStorage.setItem(KEYS.SLIDER, JSON.stringify(data));
}
},
// News
getNews: (): NewsItem[] => {
if (!isBrowser) return newsData;
const stored = localStorage.getItem(KEYS.NEWS);
return stored ? JSON.parse(stored) : newsData;
},
setNews: (data: NewsItem[]) => {
if (isBrowser) {
localStorage.setItem(KEYS.NEWS, JSON.stringify(data));
}
},
addNews: (newsItem: Omit<NewsItem, 'id'>) => {
const current = dataStore.getNews();
const newItem = { ...newsItem, id: Date.now() };
dataStore.setNews([newItem, ...current]);
return newItem;
},
updateNews: (id: number, newsItem: Partial<NewsItem>) => {
const current = dataStore.getNews();
const updated = current.map((item) =>
item.id === id ? { ...item, ...newsItem } : item
);
dataStore.setNews(updated);
},
deleteNews: (id: number) => {
const current = dataStore.getNews();
const filtered = current.filter((item) => item.id !== id);
dataStore.setNews(filtered);
},
// Media
getMedia: (): MediaItem[] => {
if (!isBrowser) return mediaData;
const stored = localStorage.getItem(KEYS.MEDIA);
return stored ? JSON.parse(stored) : mediaData;
},
setMedia: (data: MediaItem[]) => {
if (isBrowser) {
localStorage.setItem(KEYS.MEDIA, JSON.stringify(data));
}
},
addMedia: (mediaItem: Omit<MediaItem, 'id'>) => {
const current = dataStore.getMedia();
const newItem = { ...mediaItem, id: Date.now() };
dataStore.setMedia([newItem, ...current]);
return newItem;
},
updateMedia: (id: number, mediaItem: Partial<MediaItem>) => {
const current = dataStore.getMedia();
const updated = current.map((item) =>
item.id === id ? { ...item, ...mediaItem } : item
);
dataStore.setMedia(updated);
},
deleteMedia: (id: number) => {
const current = dataStore.getMedia();
const filtered = current.filter((item) => item.id !== id);
dataStore.setMedia(filtered);
},
// Documents
getDocuments: (): Document[] => {
if (!isBrowser) return documentsData;
const stored = localStorage.getItem(KEYS.DOCUMENTS);
return stored ? JSON.parse(stored) : documentsData;
},
setDocuments: (data: Document[]) => {
if (isBrowser) {
localStorage.setItem(KEYS.DOCUMENTS, JSON.stringify(data));
}
},
addDocument: (document: Omit<Document, 'id'>) => {
const current = dataStore.getDocuments();
const newItem = { ...document, id: Date.now() };
dataStore.setDocuments([newItem, ...current]);
return newItem;
},
updateDocument: (id: number, document: Partial<Document>) => {
const current = dataStore.getDocuments();
const updated = current.map((item) =>
item.id === id ? { ...item, ...document } : item
);
dataStore.setDocuments(updated);
},
deleteDocument: (id: number) => {
const current = dataStore.getDocuments();
const filtered = current.filter((item) => item.id !== id);
dataStore.setDocuments(filtered);
},
// Metro Stations
getMetroStations: (): MetroStation[] => {
if (!isBrowser) return metroStations;
const stored = localStorage.getItem(KEYS.METRO_STATIONS);
return stored ? JSON.parse(stored) : metroStations;
},
setMetroStations: (data: MetroStation[]) => {
if (isBrowser) {
localStorage.setItem(KEYS.METRO_STATIONS, JSON.stringify(data));
}
},
updateStation: (id: number, station: Partial<MetroStation>) => {
const current = dataStore.getMetroStations();
const updated = current.map((item) =>
item.id === id ? { ...item, ...station } : item
);
dataStore.setMetroStations(updated);
},
// Reset all data
resetAll: () => {
if (isBrowser) {
localStorage.removeItem(KEYS.SLIDER);
localStorage.removeItem(KEYS.NEWS);
localStorage.removeItem(KEYS.MEDIA);
localStorage.removeItem(KEYS.DOCUMENTS);
localStorage.removeItem(KEYS.METRO_STATIONS);
}
}
};