diff --git a/components/donation-nag-modal.tsx b/components/donation-nag-modal.tsx index f1036dd5..f37d5d91 100644 --- a/components/donation-nag-modal.tsx +++ b/components/donation-nag-modal.tsx @@ -15,8 +15,9 @@ import { ButtonWithCenteredText } from './button/centered-text'; import { signedInUser } from '../App'; import { api } from '../api/api'; import { getRandomElement } from '../util/util'; +import * as _ from "lodash"; -const gagLocations = [ +const gagLocations = _.shuffle([ '/a/', '/adv/', '/r9k/', @@ -32,9 +33,9 @@ const gagLocations = [ 'a televangelist hotline', 'annual cheese rolling event-goers', 'boomers on Facebook', - 'cabal of BPD-having besties 😊', 'chat', 'goth girls at the local cemetery', + 'grandma', 'jehovah’s witnesses', 'my Ao3 readers', 'my Discord server', @@ -50,6 +51,7 @@ const gagLocations = [ 'my YouTube subscribers', 'my autism support group', 'my body pillow', + 'my cabal of BPD-having besties 😊', 'my church', 'my colleagues', 'my cosplay convention', @@ -58,7 +60,6 @@ const gagLocations = [ 'my femboy oomfies', 'my flat earth society gathering', 'my furry convention', - 'my grandmother’s ghost', 'my imaginary friend', 'my local renaissance faire', 'my mom', @@ -89,7 +90,7 @@ const gagLocations = [ 'the homeless gentleman outside my apartment', 'the voices in my head', 'you want I want, what I really really want', -]; +]); const DonationNagModal = () => { const name = signedInUser?.name; @@ -256,10 +257,12 @@ const MarketingDonationNagModalWeb = ({ name: string estimatedEndDate: Date }) => { - const [gagLocation, setGagLocation] = useState(getRandomElement(gagLocations)); + const [gagLocationIndex, setGagLocationIndex] = useState(0); const [isVisible, setIsVisible] = useState(true); const opacity = useRef(new Animated.Value(1)).current; + const gagLocation = gagLocations[gagLocationIndex % gagLocations.length]; + useEffect(() => { // Function to pick a random location with cross-fade animation const pickRandomLocation = () => { @@ -270,8 +273,7 @@ const MarketingDonationNagModalWeb = ({ useNativeDriver: true, }).start(() => { // After fade-out completes, update the location - const randomIndex = Math.floor(Math.random() * gagLocations.length); - setGagLocation(gagLocations[randomIndex]); + setGagLocationIndex((i) => i + 1); // Fade in the new text Animated.timing(opacity, { @@ -351,7 +353,10 @@ const MarketingDonationNagModalWeb = ({ textAlign: 'center', }} > - Want Duolicious to stay free? You’re gonna need to do some shilling... + + Want Duolicious to stay free? + + {} You’re gonna need to do some shilling... @@ -368,9 +373,8 @@ const MarketingDonationNagModalWeb = ({ textAlign: 'center', }} > - Shilling is what brought us all here. But Duolicious’ choice to - be 100% free and volunteer-run means we can’t afford paid shills - like big apps can. That means {} + Duolicious’ choice to be 100% free and volunteer-run means we + can’t afford paid shills like big apps can. That means {} edgy shitposters like you