1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-19 12:59:36 +02:00
AdventureLog/frontend/src/lib/index.ts

201 lines
5.5 KiB
TypeScript
Raw Normal View History

2024-07-08 11:44:39 -04:00
import inspirationalQuotes from './json/quotes.json';
2024-08-05 21:36:38 -04:00
import type { Adventure, Checklist, Collection, Note, Transportation } from './types';
2024-07-08 11:44:39 -04:00
export function getRandomQuote() {
const quotes = inspirationalQuotes.quotes;
const randomIndex = Math.floor(Math.random() * quotes.length);
let quoteString = quotes[randomIndex].quote;
let authorString = quotes[randomIndex].author;
return '"' + quoteString + '" - ' + authorString;
}
export function getFlag(size: number, country: string) {
return `https://flagcdn.com/h${size}/${country}.png`;
}
export function checkLink(link: string) {
if (link.startsWith('http://') || (link.startsWith('https://') && link.indexOf('.') !== -1)) {
return link;
} else {
return 'http://' + link + '.com';
}
}
2024-07-17 10:35:42 -04:00
export async function exportData() {
let res = await fetch('/api/adventures/all');
let adventures = (await res.json()) as Adventure[];
res = await fetch('/api/collections/all');
let collections = (await res.json()) as Collection[];
res = await fetch('/api/visitedregion');
let visitedRegions = await res.json();
const data = {
adventures,
collections,
visitedRegions
};
const blob = new Blob([JSON.stringify(data)], { type: 'application/json' });
return URL.createObjectURL(blob);
}
2024-08-04 13:27:05 -04:00
export function isValidUrl(url: string) {
try {
new URL(url);
return true;
} catch (err) {
return false;
}
}
2024-08-05 18:48:11 -04:00
export function groupAdventuresByDate(
adventures: Adventure[],
startDate: Date,
numberOfDays: number
): Record<string, Adventure[]> {
const groupedAdventures: Record<string, Adventure[]> = {};
for (let i = 0; i < numberOfDays; i++) {
const currentDate = new Date(startDate);
currentDate.setDate(startDate.getDate() + i);
const dateString = currentDate.toISOString().split('T')[0];
groupedAdventures[dateString] = [];
}
adventures.forEach((adventure) => {
if (adventure.date) {
const adventureDate = new Date(adventure.date).toISOString().split('T')[0];
2024-08-19 16:32:08 -04:00
if (adventure.end_date) {
const endDate = new Date(adventure.end_date).toISOString().split('T')[0];
const currentDate = new Date(startDate);
for (let i = 0; i < numberOfDays; i++) {
currentDate.setDate(startDate.getDate() + i);
const dateString = currentDate.toISOString().split('T')[0];
if (dateString >= adventureDate && dateString <= endDate) {
if (groupedAdventures[dateString]) {
groupedAdventures[dateString].push(adventure);
}
}
}
} else if (groupedAdventures[adventureDate]) {
2024-08-05 18:48:11 -04:00
groupedAdventures[adventureDate].push(adventure);
}
}
});
return groupedAdventures;
}
export function groupTransportationsByDate(
transportations: Transportation[],
startDate: Date,
numberOfDays: number
): Record<string, Transportation[]> {
const groupedTransportations: Record<string, Transportation[]> = {};
for (let i = 0; i < numberOfDays; i++) {
const currentDate = new Date(startDate);
currentDate.setDate(startDate.getDate() + i);
const dateString = currentDate.toISOString().split('T')[0];
groupedTransportations[dateString] = [];
}
transportations.forEach((transportation) => {
if (transportation.date) {
const transportationDate = new Date(transportation.date).toISOString().split('T')[0];
2024-08-19 16:32:08 -04:00
if (transportation.end_date) {
const endDate = new Date(transportation.end_date).toISOString().split('T')[0];
const currentDate = new Date(startDate);
for (let i = 0; i < numberOfDays; i++) {
currentDate.setDate(startDate.getDate() + i);
const dateString = currentDate.toISOString().split('T')[0];
if (dateString >= transportationDate && dateString <= endDate) {
if (groupedTransportations[dateString]) {
groupedTransportations[dateString].push(transportation);
}
}
}
} else if (groupedTransportations[transportationDate]) {
2024-08-05 18:48:11 -04:00
groupedTransportations[transportationDate].push(transportation);
}
}
});
return groupedTransportations;
}
export function groupNotesByDate(
notes: Note[],
startDate: Date,
numberOfDays: number
): Record<string, Note[]> {
const groupedNotes: Record<string, Note[]> = {};
for (let i = 0; i < numberOfDays; i++) {
const currentDate = new Date(startDate);
currentDate.setDate(startDate.getDate() + i);
const dateString = currentDate.toISOString().split('T')[0];
groupedNotes[dateString] = [];
}
notes.forEach((note) => {
if (note.date) {
const noteDate = new Date(note.date).toISOString().split('T')[0];
if (groupedNotes[noteDate]) {
groupedNotes[noteDate].push(note);
}
}
});
return groupedNotes;
}
2024-08-05 21:36:38 -04:00
export function groupChecklistsByDate(
checklists: Checklist[],
startDate: Date,
numberOfDays: number
): Record<string, Checklist[]> {
const groupedChecklists: Record<string, Checklist[]> = {};
for (let i = 0; i < numberOfDays; i++) {
const currentDate = new Date(startDate);
currentDate.setDate(startDate.getDate() + i);
const dateString = currentDate.toISOString().split('T')[0];
groupedChecklists[dateString] = [];
}
checklists.forEach((checklist) => {
if (checklist.date) {
const noteDate = new Date(checklist.date).toISOString().split('T')[0];
if (groupedChecklists[noteDate]) {
groupedChecklists[noteDate].push(checklist);
}
}
});
return groupedChecklists;
}
export function continentCodeToString(code: string) {
switch (code) {
case 'AF':
return 'Africa';
case 'AN':
return 'Antarctica';
case 'AS':
return 'Asia';
case 'EU':
return 'Europe';
case 'NA':
return 'North America';
case 'OC':
return 'Oceania';
case 'SA':
return 'South America';
default:
return 'Unknown';
}
}