This repository has been archived on 2025-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
lcm-potty-chart/data/stickerSeeder.ts
Lucid Kobold 7b36b040e5 Fix layout.
2022-06-24 09:39:49 -05:00

65 lines
1.6 KiB
TypeScript

import {
format,
getDaysInMonth,
isBefore,
setDate,
startOfDay
} from "date-fns";
/**
* Generated a valid sticker value for use when generating a sticker obj.
* @returns {ValidStickerVal} a number that will represent a valid sticker value.
*/
const generateSticker = (): -2 | -1 | 0 | 1 | 2 => {
const sticker = Math.floor(Math.random() * (2 - -2 + 1)) + -2;
if (
sticker === -2 ||
sticker === -1 ||
sticker === 0 ||
sticker === 1 ||
sticker === 2
) {
return sticker;
}
};
// TODO: Update so seeder takes in a month or date to then generate the stickers for it.
/**
* This seeder is to simulate the date and sticker info from the database.
* Filling up an array for the current month with sticker from ths first to
* the day before the current date, leaving the rest of the month empty.
* @returns {StickerDays} an array with populated sticker objects that correspond to the current month's info.
*/
const stickersSeeder = (): StickerDays => {
const stickers = [] as Sticker[];
const now = startOfDay(new Date());
const daysOfThisMonth = getDaysInMonth(now);
for (let i = 1; i <= daysOfThisMonth; i++) {
const currDate = setDate(now, i);
const sticker = isBefore(currDate, now) ? generateSticker() : null;
const id =
format(currDate, "yyyyddLL") + `/${sticker === null ? 0 : sticker}`;
const newSticker: Sticker = {
id: id,
date: currDate.toJSON(),
sticker: sticker,
edited: false,
manual: false
};
stickers.push(newSticker);
}
if (stickers.length === daysOfThisMonth) {
return stickers;
}
};
export default stickersSeeder;