Vlad Narizhnyi
11 months ago
40 changed files with 413 additions and 295 deletions
@ -1,21 +1,18 @@
@@ -1,21 +1,18 @@
|
||||
|
||||
|
||||
export const onBoardingTranslationUa = { |
||||
step1: { |
||||
title: 'Ласкаво просимо!', |
||||
description: |
||||
'Дякуємо за завантаження. Тепер ви \n в найкращій грі для компанії або \n пограти з коханою людиною', |
||||
}, |
||||
|
||||
step2: { |
||||
title: 'Розслабтеся та насолоджуйтеся грою', |
||||
description: |
||||
'У цій грі є 5 рівнів "пікантності", деякі з яких розділені на ігри для пари або компанії. Все, що вам потрібно зробити, це додати гравців, і ви можете почати грати.\n P.S. Ви завжди можете створити власні питання та завдання', |
||||
}, |
||||
step3: { |
||||
title: 'Преміум версія!', |
||||
description: |
||||
'Надає необмежений доступ до пакетів Hard та режиму Extreme \nНасолоджуйтеся інтригуючими запитаннями та захоплюючими діями', |
||||
}, |
||||
}; |
||||
step1: { |
||||
title: 'Ласкаво просимо!', |
||||
description: |
||||
'Дякуємо за завантаження. Тепер ти \n в найкращій грі для компанії або \n пограти з коханою людиною', |
||||
}, |
||||
|
||||
step2: { |
||||
title: 'Розслабся та насолоджуйся грою', |
||||
description: |
||||
'У цій грі є 3 рівня "пікантності". Все, що потрібно - це додати гравців.\n P.S. Ти завжди можеш створити власні питання та завдання', |
||||
}, |
||||
step3: { |
||||
title: 'Преміум версія!', |
||||
description: |
||||
'Надає необмежений доступ до пакету "Сrazy". \nНасолоджуйся інтригуючими запитаннями та захоплюючими діями', |
||||
}, |
||||
} |
||||
|
@ -1,5 +1,3 @@
@@ -1,5 +1,3 @@
|
||||
export * from './use-nav.hook' |
||||
export * from './use-dispatch.hook' |
||||
export * from './use-events-listener.hook' |
||||
export * from './use-selector.hook' |
||||
export * from './use-form.hook' |
||||
|
@ -1,4 +0,0 @@
@@ -1,4 +0,0 @@
|
||||
import { useDispatch } from 'react-redux' |
||||
import { AppDispatch } from '../../../store/store' |
||||
|
||||
export const useAppDispatch = () => useDispatch<AppDispatch>() |
@ -1,5 +0,0 @@
@@ -1,5 +0,0 @@
|
||||
import { useSelector } from 'react-redux' |
||||
import { TypedUseSelectorHook } from 'react-redux' |
||||
import { RootState } from '../../../store/store' |
||||
|
||||
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
export * from './storage.service'; |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage' |
||||
import { StorageKey } from '../typing' |
||||
|
||||
export class StorageService { |
||||
constructor() { |
||||
this.init() |
||||
} |
||||
|
||||
private init() {} |
||||
|
||||
public async get(key: StorageKey) { |
||||
try { |
||||
const encode = await AsyncStorage.getItem(key) |
||||
if (encode) { |
||||
return JSON.parse(encode) |
||||
} else { |
||||
return null |
||||
} |
||||
} catch (error) { |
||||
console.error('error get from async storage', error) |
||||
} |
||||
} |
||||
|
||||
public async set(key: StorageKey, data: any) { |
||||
try { |
||||
const encode = JSON.stringify(data) |
||||
await AsyncStorage.setItem(key, encode) |
||||
} catch (error) { |
||||
console.error('error set to async storage', error) |
||||
} |
||||
} |
||||
} |
||||
|
||||
export const storageService = new StorageService() |
@ -1,24 +0,0 @@
@@ -1,24 +0,0 @@
|
||||
import { selectShuffled, selectShuffledCustom } from '../../../store/slices' |
||||
import { CustomType, PackageType, useAppSelector } from '../../common' |
||||
|
||||
interface UseTruthOrDareProps { |
||||
isTruth: boolean |
||||
customType: CustomType |
||||
} |
||||
|
||||
export const getCurrentTruthOrDare = ({ |
||||
isTruth, |
||||
customType, |
||||
}: UseTruthOrDareProps) => { |
||||
const shuffledGameItems = useAppSelector(selectShuffled) |
||||
const shuffledCustomPackage = useAppSelector(selectShuffledCustom) |
||||
const dares = shuffledGameItems.filter(dare => dare.isDare) |
||||
const questions = shuffledGameItems.filter(question => !question.isDare) |
||||
const packageTruthOrDare = isTruth ? questions : dares |
||||
|
||||
const truthOrDareItems = customType |
||||
? shuffledCustomPackage[customType] |
||||
: packageTruthOrDare |
||||
|
||||
return truthOrDareItems |
||||
} |
@ -0,0 +1,123 @@
@@ -0,0 +1,123 @@
|
||||
import { useEffect } from 'react' |
||||
import { |
||||
resetSteps, |
||||
resetStepsByTruthOrDare, |
||||
selectCustomPackage, |
||||
selectPackage, |
||||
selectShuffleCustomPackage, |
||||
selectStep, |
||||
shuffleCustomPackage, |
||||
shufflePackage, |
||||
} from '../../../store/slices' |
||||
import { |
||||
CustomType, |
||||
Language, |
||||
PackageType, |
||||
StorageKey, |
||||
storageService, |
||||
} from '../../common' |
||||
import { useTranslation } from 'react-i18next' |
||||
import { useAnimationTruthOrDare } from '../animations' |
||||
import { useDispatch, useSelector } from 'react-redux' |
||||
import { RootState } from '~store/store' |
||||
import firestore from '@react-native-firebase/firestore' |
||||
import _ from 'lodash' |
||||
|
||||
interface UseTruthOrDareProps { |
||||
isTruth: boolean |
||||
customType: CustomType |
||||
packageType: PackageType |
||||
} |
||||
|
||||
export const getCurrentTruthOrDare = ({ |
||||
isTruth, |
||||
customType, |
||||
packageType, |
||||
}: UseTruthOrDareProps) => { |
||||
const dispatch = useDispatch() |
||||
const { i18n } = useTranslation() |
||||
const { stepTruth, stepDare } = useSelector(selectStep) |
||||
const customPackageShuffle = useSelector(selectShuffleCustomPackage) |
||||
const customPackage = useSelector(selectCustomPackage) |
||||
const gameItems = useSelector((state: RootState) => |
||||
selectPackage(state, packageType), |
||||
) |
||||
const currentStep = isTruth ? stepTruth : stepDare |
||||
|
||||
console.log('customPackageShuffle', customPackageShuffle) |
||||
console.log('customPackage', customPackage) |
||||
|
||||
const { animStyle, startAnimation } = useAnimationTruthOrDare() |
||||
|
||||
const getGameItemsByPackage = () => { |
||||
if (!packageType) return |
||||
|
||||
const dares = gameItems.filter(dare => dare.isDare) |
||||
const questions = gameItems.filter(question => !question.isDare) |
||||
return isTruth ? questions : dares |
||||
} |
||||
|
||||
const getGameItemsByCustomPackage = () => { |
||||
if (_.isEmpty(customPackageShuffle.questions)) |
||||
return customPackage[customType] |
||||
|
||||
return customPackageShuffle[customType] |
||||
} |
||||
|
||||
const getCurrentItem = () => { |
||||
if (customType) { |
||||
return customTruthsOrDares?.[currentStep] |
||||
} |
||||
|
||||
return packageTruthsOrDares?.[currentStep]?.[i18n.language as Language] |
||||
} |
||||
const customTruthsOrDares = getGameItemsByCustomPackage() |
||||
const packageTruthsOrDares = getGameItemsByPackage() |
||||
const currentItem = getCurrentItem() |
||||
|
||||
const shuffleAndSavePackage = async () => { |
||||
const shufflePackages = _.shuffle(packageTruthsOrDares) |
||||
await firestore() |
||||
.collection('content') |
||||
.doc(packageType) |
||||
.update(shufflePackages) |
||||
|
||||
dispatch(resetStepsByTruthOrDare(isTruth)) |
||||
dispatch(shufflePackage(packageType)) |
||||
} |
||||
|
||||
const shuffleAndSaveCustomPackage = async () => { |
||||
if (_.isEmpty(customTruthsOrDares)) return |
||||
|
||||
const shuffleCustom = _.shuffle(customTruthsOrDares) |
||||
|
||||
console.log('newShuffle', shuffleCustom) |
||||
|
||||
dispatch(shuffleCustomPackage({ customType, shuffleCustom })) |
||||
dispatch(resetStepsByTruthOrDare(isTruth)) |
||||
|
||||
const savedShuffleCustom = await storageService.get( |
||||
StorageKey.ShuffleCustomPackage, |
||||
) |
||||
|
||||
const newShuffled = { |
||||
...savedShuffleCustom, |
||||
[customType]: shuffleCustom, |
||||
} |
||||
await storageService.set(StorageKey.ShuffleCustomPackage, newShuffled) |
||||
} |
||||
|
||||
useEffect(() => { |
||||
if (packageType && currentStep === packageTruthsOrDares.length) { |
||||
shuffleAndSavePackage() |
||||
} |
||||
|
||||
if (customType && currentStep === customTruthsOrDares.length) { |
||||
shuffleAndSaveCustomPackage() |
||||
} |
||||
|
||||
startAnimation() |
||||
}, [currentStep]) |
||||
|
||||
return { currentItem, animStyle } |
||||
} |
Loading…
Reference in new issue