Ana Sayfa Fix
This commit is contained in:
196
lib/dataStore.ts
Normal file
196
lib/dataStore.ts
Normal file
@@ -0,0 +1,196 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user