From e38b5db33c9c8a3591abb3d1047706d6aef4ac14 Mon Sep 17 00:00:00 2001 From: Wren Hawthorne Date: Thu, 11 Jul 2024 03:33:21 -0700 Subject: [PATCH] Auto-populate the first title if none are chosen --- .npmrc | 1 + src/components/NewSongStep.tsx | 22 +++++---- src/utils/title.ts | 84 ++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 10 deletions(-) create mode 100644 .npmrc create mode 100644 src/utils/title.ts diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..521a9f7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +legacy-peer-deps=true diff --git a/src/components/NewSongStep.tsx b/src/components/NewSongStep.tsx index e7c4990..b007abd 100644 --- a/src/components/NewSongStep.tsx +++ b/src/components/NewSongStep.tsx @@ -66,19 +66,21 @@ export const NewSongStep = (props: NewSongProps) => { { - if (title != '') { + if (title == '') { + persistTitle(options[0]) + } else { persistTitle(title) - dispatch?.({ type: "start" }) - dispatch?.({ type: "setStep", step: WorkflowStep.DRUMS }) - const transport = getTransport() - transport.loop = true - transport.loopStart = 0 - transport.loopEnd = '4m' - transport.start("+0.1") - await getContext().resume() } + dispatch?.({ type: "start" }) + dispatch?.({ type: "setStep", step: WorkflowStep.DRUMS }) + const transport = getTransport() + transport.loop = true + transport.loopStart = 0 + transport.loopEnd = '4m' + transport.start("+0.1") + await getContext().resume() + }} > diff --git a/src/utils/title.ts b/src/utils/title.ts new file mode 100644 index 0000000..14a2df3 --- /dev/null +++ b/src/utils/title.ts @@ -0,0 +1,84 @@ +import { faker } from "@faker-js/faker" +import _ from "lodash" + +const INCLUDED_TYPES = ['smiley', 'nature'] as const + + +const FILTERED_EMOJIS = new Set([ + '💋', + '🗨️', + '😏', + '😫', + '💮', + '🤮', + '🥵', + '💦' + +]) +const FILTERED_PREPOSITIONS = new Set([ + 'abaft', + 'amid', + 'anti', + 'afore', + 'aside', + 'anenst', + 'apropros', + 'apud', + 'circa', + 'lest', + 'mid', + 'midst', + 'pace', + 'qua', + 'sans', + 'save', + 'vice' +]) + +const getEmoji = () => { + let emoji: string = '' + while (emoji === '' || FILTERED_EMOJIS.has(emoji)) { + emoji = faker.internet.emoji({ types: INCLUDED_TYPES }) + } + return emoji +} +const getPreposition = () => { + let prep: string = '' + while (prep === '' || FILTERED_PREPOSITIONS.has(prep)) { + prep = faker.word.preposition({ length: { min: 2, max: 5 } }) + } + return prep +} + +const generatePrepTitle = () => { + const emoji1 = getEmoji() + const prep = getPreposition() + const emoji2 = getEmoji() + return `${emoji1} ${prep} ${emoji2}` +} + +const generateAdjectiveTitle = () => { + const emoji1 = getEmoji() + const adjective = faker.word.adjective({length: { min: 1, max: 5}}) + return _.startCase(`${adjective} ${emoji1}`) +} + +const generateEmojiTitle = () => { + const numberOfEmoji = faker.number.int({ min: 1, max: 3}) + return Array.from({ length: numberOfEmoji }).map( + () => getEmoji() + ).join('') +} + +export const generateTitleOptions = (length: number = 6) => { + const options = Array.from({ length }).map((_, i) => { + if (i % 3 === 0) { + return generatePrepTitle() + } else if (i % 2 === 0) { + return generateAdjectiveTitle() + } else { + return generateEmojiTitle() + } + }) + return options +} \ No newline at end of file