import { dataBuilder } from "@helpers/datas/dataBuilder"; import { lorem } from "@helpers/ui/lipsum"; import { get_random_image } from "@mocks/image.mock"; import { get_random_namedResource } from "@mocks/namedResource.mock"; import { offerPurchase, offerSubscription } from "@mocks/offers.mock"; import { provider } from "@mocks/provider.mock"; import { service } from "@mocks/service.mock"; import { type DataOffer, RDFTYPE_DATAOFFER } from "@src/rdf"; export const dataOffer: DataOffer = { "@id": "store://local.sample-object/data-offers/1/", "@type": RDFTYPE_DATAOFFER, creation_date: "2024-11-11T14:03:03.534000Z", update_date: "2024-11-18T13:59:20.223723Z", name: "Data Offer 1", description: "APA Visuals are modular, fully-responsive HTML infographics that can be displayed on all platforms (web, mobile, TV and screens).", provider: null, services: [], offers: [offerPurchase, offerSubscription], image: get_random_image(), categories: Array.from( { length: Math.floor(Math.random() * 2) }, get_random_namedResource ), }; export type dataOfferParameters = { allowRemovables?: boolean; // false }; export const get_random_dataOffer = ( parameters: dataOfferParameters = {} ): DataOffer => { const removables: string[] = []; const replacements: DataOffer = { "@id": `store://local.sample-object/${Math.floor(Math.random() * 1000)}/`, creation_date: new Date( Date.now() - Math.random() * 365 * 24 * 60 * 60 * 1000 ).toISOString(), update_date: new Date( Date.now() - Math.random() * 30 * 24 * 60 * 60 * 1000 ).toISOString(), name: lorem.generateWords(Math.floor(Math.random() * 3) + 1), description: lorem.generateSentences(2), provider: provider, services: [service], offers: [offerPurchase, offerSubscription], image: get_random_image(), categories: Array.from( { length: Math.floor(Math.random() * 2) }, get_random_namedResource ), }; if (parameters.allowRemovables) { const removableGenerator = (key: string) => { // Between 0 and 25% chance if (Math.random() < Math.random() * 0.25) { removables.push(key); } }; removableGenerator("name"); removableGenerator("description"); removableGenerator("provider"); removableGenerator("services"); removableGenerator("offers"); removableGenerator("image"); removableGenerator("categories"); } return dataBuilder(dataOffer, removables, replacements, true) as DataOffer; };