Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
d778546
feat: added audio icon in testaments, started community audio page
BogdanLi Oct 25, 2024
d961ecf
feat: refactored community audio component till everything works fine
BogdanLi Oct 26, 2024
b51f6b2
feat: implemented verses component
BogdanLi Oct 26, 2024
f21a575
feat: started recorder component
BogdanLi Oct 27, 2024
e477517
feat: made recording, pausing, stoping and playing
BogdanLi Oct 28, 2024
b555a0a
feat: finished recorder
BogdanLi Oct 28, 2024
a209a15
feat: made font size adjustment
BogdanLi Oct 30, 2024
2d704c4
feat: made simple teleprompter functionality
BogdanLi Nov 2, 2024
d3938a7
feat: minor refactor
BogdanLi Nov 2, 2024
685dca3
feat: minor fixes
BogdanLi Nov 15, 2024
6297539
Merge branch 'feature-bogdan-706' of https://github.com/BogdanLi/leve…
BogdanLi Nov 15, 2024
6cc562e
Merge branch 'develop' of https://github.com/BogdanLi/level into feat…
BogdanLi Nov 18, 2024
4df1b18
feat: fixed conflict
BogdanLi Nov 18, 2024
8ec0fc0
feat: max speed 15
BogdanLi Nov 19, 2024
634720b
feat: added filename
BogdanLi Nov 20, 2024
e8d0b55
feat: lint fix
BogdanLi Nov 21, 2024
c251096
feat: converted to mp3
BogdanLi Nov 21, 2024
0bb9c6c
feat: minor fixes
BogdanLi Nov 25, 2024
470bfba
feat: finished comments fixes
BogdanLi Nov 25, 2024
8739e92
feat: removed lamejs
BogdanLi Nov 25, 2024
bc69d27
feat: add getTableOfContent parseYAML
DenisArger Nov 28, 2024
55441e3
feat: add base Navigation
DenisArger Nov 28, 2024
c1be6bc
feat: add getTitleOfContent
DenisArger Nov 28, 2024
b7147e2
feat: add fill categoryOptions from manifest
DenisArger Nov 29, 2024
0b317c3
fix: delete used CustomComboBox
DenisArger Nov 29, 2024
c34dba2
feat: update info navigation
DenisArger Nov 29, 2024
b1dc555
feat: add save history navigation
DenisArger Nov 29, 2024
803c7ef
fix: edit parseYAML
DenisArger Nov 29, 2024
a7a2fda
feat: used depth for children item
DenisArger Nov 29, 2024
3993a4f
feat: add updateParsedYamlTitles
DenisArger Nov 29, 2024
9aa5abc
feat: isCheck ref for children
DenisArger Nov 29, 2024
6069cd6
feat: add searchQuery for selected Category
DenisArger Nov 29, 2024
3a2b0e9
feat: add search for allTopics
DenisArger Dec 3, 2024
a2d8bb3
fix: edit select item after search
DenisArger Dec 3, 2024
b3c259a
feat: edit show filteredTopics
DenisArger Dec 3, 2024
bb20820
feat: add DropdownSearch
DenisArger Dec 3, 2024
09e79a5
feat: add with for ModalInSideBar
DenisArger Dec 3, 2024
5f2bd31
refactor: optimize code
DenisArger Dec 4, 2024
583a6a5
feat: add space for children item
DenisArger Dec 4, 2024
75016f1
fix: mirror edit
DenisArger Dec 4, 2024
f201b69
fix: delete setShowAbout
DenisArger Dec 6, 2024
94d6b10
fix: skip resource === 'tAcademy'
DenisArger Dec 6, 2024
fbe352b
feat: added function has_assigned_verses
Pavel064 Dec 11, 2024
e736ab1
fix: removed unnecessary migration
Pavel064 Dec 11, 2024
19c7e13
fix: fix file name
Pavel064 Dec 12, 2024
2e259ed
Merge branch 'develop' of https://github.com/BogdanLi/level into feat…
BogdanLi Dec 12, 2024
4554fe6
feat: fixed on comments, added lamejs
BogdanLi Dec 12, 2024
392500d
feat: mp3 converter
BogdanLi Dec 12, 2024
59c387e
feat: added recorder loading after recording stopped
BogdanLi Dec 13, 2024
817ddf5
feat: fixed on comments
BogdanLi Dec 16, 2024
f3b99dd
feat: comments fix
BogdanLi Dec 18, 2024
c7a79ae
Merge remote-tracking branch 'origin/develop' into feature-denisarger…
DenisArger Dec 18, 2024
8fa715a
fix: add migration
DenisArger Dec 18, 2024
fb30c44
style: edit style weight & padding
DenisArger Dec 18, 2024
9d0375a
fix: edit style for tA
DenisArger Dec 19, 2024
34ad860
feat: update info version
DenisArger Dec 19, 2024
4f8a51e
Merge pull request #727 from BogdanLi/feature-bogdan-706
Valyukhov Dec 19, 2024
6a66a42
fix: :bug: revert primary key
Valyukhov Dec 19, 2024
dabc567
Merge remote-tracking branch 'origin/develop' into feature-denisarger…
DenisArger Dec 20, 2024
8671621
fix: delete console.log
DenisArger Dec 20, 2024
58e9734
feat: add readFileFromZip
DenisArger Dec 20, 2024
ba374cd
fix: add useMemo
DenisArger Dec 20, 2024
110c0cb
fix: delete setHref for filters topics
DenisArger Dec 20, 2024
961da55
Merge pull request #757 from hiscoder-com/feature-denisarger-729
DenisArger Dec 20, 2024
facc6b7
fix: add 20241220094726_remote_schema
DenisArger Dec 20, 2024
4364f5a
fix: edit ci
DenisArger Dec 20, 2024
5788df1
fix: edit migration
DenisArger Dec 20, 2024
e036e0f
Merge remote-tracking branch 'origin/develop' into feature-pavel-718
DenisArger Dec 20, 2024
ef4ea09
fix: edit migration
DenisArger Dec 20, 2024
2dc80c7
refactor: :recycle: add logo
Valyukhov Dec 20, 2024
e894bf6
feat: :sparkles: add link hiscoder to sidebar
Valyukhov Dec 20, 2024
c72488a
Merge pull request #750 from hiscoder-com/feature-pavel-718
Valyukhov Dec 20, 2024
044b4ce
fix: :bug: fix logo
Valyukhov Dec 20, 2024
2a2eec4
fix: :bug: fix padding
Valyukhov Dec 20, 2024
7a705fb
Merge pull request #758 from hiscoder-com/add-hiscoder-logo
Valyukhov Dec 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ jobs:
version: latest

- run: supabase link --project-ref $SUPABASE_PROJECT_ID
- run: supabase db push
- run: supabase db push
47 changes: 47 additions & 0 deletions components/CommunityAudio/AudioPreview.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import AudioPause from 'public/icons/audioPause.svg'
import AudioPlay from 'public/icons/audioPlay.svg'
import Download from 'public/icons/download-audio.svg'
import Loading from 'public/icons/progress.svg'

export default function AudioPreview({
audioUrl,
onPlay,
onPause,
isPlaying,
audioName,
loading,
}) {
return (
<div
className={`flex items-center gap-2 rounded-full border border-th-text-primary p-2 ${
!audioUrl || loading ? 'opacity-70' : ''
}`}
>
<p className="text-sm">{audioName || 'audio'}</p>
<a
href={audioUrl || ''}
className="disabled:fill-gray-400"
download={`${audioName || 'audio'}.mp3`}
>
{loading && !audioUrl ? (
<Loading className="progress-custom-colors h-5 w-5 animate-spin stroke-th-secondary-100" />
) : (
<Download />
)}
</a>
<button
disabled={!audioUrl}
className="rounded-full bg-th-secondary-400 p-2 disabled:bg-th-text-primary"
onClick={isPlaying ? onPause : onPlay}
>
{loading ? (
<Loading className="progress-custom-colors h-5 w-5 animate-spin stroke-th-secondary-100" />
) : isPlaying ? (
<AudioPause className="h-5 w-5" />
) : (
<AudioPlay className="h-5 w-5" />
)}
</button>
</div>
)
}
210 changes: 210 additions & 0 deletions components/CommunityAudio/BookListReader.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'

import { useRouter } from 'next/router'

import { Disclosure, Tab } from '@headlessui/react'
import { useTranslation } from 'next-i18next'

import ChecksIcon from 'components/Project/BookList/ChecksIcon'
import Card from 'components/Project/Card'

import { checkChapterVersesExist } from 'utils/helper'
import { useGetChaptersTranslate } from 'utils/hooks'

import Down from 'public/icons/arrow-down.svg'

function BookListReader({ books, setReference, reference, project, code }) {
const [currentBook, setCurrentBook] = useState(null)
const [createdOldTestamentBooks, createdNewTestamentBooks] = books
const { query, replace } = useRouter()
const { t } = useTranslation(['common', 'books'])
const refs = useRef([])
const [chapters] = useGetChaptersTranslate({ code })

const scrollRefs = useRef({})
const handleClose = (index) => {
refs.current.map((closeFunction, refIndex) => {
if (refIndex !== index) {
closeFunction()
}
})
}

const handleScroll = (bookid) => {
if (scrollRefs?.current && Object.keys(scrollRefs?.current).length) {
verseRef(scrollRefs.current[bookid])
}
}

const scrollTo = (currentBook, position) => {
let offset = 0
const top = currentBook.offsetTop - 95
switch (position) {
case 'center':
offset = currentBook.clientHeight / 2 - currentBook.parentNode.clientHeight / 2
break
case 'top':
default:
break
}

currentBook.parentNode.scrollTo({ left: 0, top: top + offset, behavior: 'smooth' })
}

const { tabs, defaultIndex } = useMemo(() => {
const index = [createdNewTestamentBooks, createdOldTestamentBooks]?.findIndex(
(list) => list?.find((el) => el.code === query.bookid)
)

const tabs =
project?.type === 'obs' ? ['OpenBibleStories'] : ['NewTestament', 'OldTestament']

const defaultIndex = index === -1 ? 0 : index

return { defaultIndex, tabs }
}, [createdNewTestamentBooks, createdOldTestamentBooks, query.bookid, project?.type])

const verseRef = useCallback((node) => {
if (node !== null) {
setCurrentBook(node)
}
}, [])

useEffect(() => {
if (currentBook) {
scrollTo(currentBook, 'top')
}
}, [currentBook])

useEffect(() => {
if (reference?.bookid) {
handleScroll(reference.bookid)
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [reference?.bookid])
return (
<Card>
<div className="flex flex-col gap-7 bg-th-secondary-10">
<Tab.Group defaultIndex={defaultIndex}>
<Tab.List className="-mt-6 flex w-full rounded-3xl border border-th-secondary-300 bg-th-secondary-10 p-1 shadow-md">
{tabs.map((tab) => (
<Tab as={Fragment} key={tab}>
{({ selected }) => (
<div
className={`w-full cursor-pointer rounded-3xl p-2 text-center ${
selected ? 'bg-th-primary-100 text-th-text-secondary-100' : ''
} `}
>
{t(tab)}
</div>
)}
</Tab>
))}
</Tab.List>

<Tab.Panels className="text-sm font-bold">
{[
...(createdNewTestamentBooks !== undefined
? [createdNewTestamentBooks]
: []),
...(createdOldTestamentBooks !== undefined
? [createdOldTestamentBooks]
: []),
].map((list, idx) => (
<Tab.Panel key={idx} className="max-h-[70vh] overflow-y-scroll pr-4">
{list?.map((book, index) => (
<Disclosure
as={'div'}
key={book.code}
defaultOpen={query?.bookid === book.code}
ref={(ref) => (scrollRefs.current[book.code] = ref)}
>
{({ open, close }) => {
return (
<>
<Disclosure.Button
ref={() => (refs.current[index] = close)}
onClick={() => {
handleClose(index)
replace(
{
query: { ...query, bookid: book.code },
},
undefined,
{ shallow: true }
)
}}
className={`flex w-full items-center justify-between py-2 hover:opacity-70 ${
!open ? 'border-b border-th-secondary-300' : ''
}`}
>
<div className="flex items-center gap-4 text-base">
<ChecksIcon levelCheck={book?.level_checks} />
<div>{t('books:' + book.code)}</div>
</div>
<Down
className={`w-6 max-w-[1.5rem] ${
open ? 'rotate-180 transform' : ''
}`}
/>
</Disclosure.Button>
<Disclosure.Panel>
<div className="flex w-full flex-wrap gap-4 border-b border-th-secondary-300 pb-5">
{[...Array(Object.keys(book.chapters).length).keys()]
.map((el) => el + 1)
.map((index) => (
<button
disabled={
!checkChapterVersesExist(
book.code,
index,
chapters
) && !reference?.checks
}
className={`flex h-10 w-10 items-center justify-center rounded-md ${
checkChapterVersesExist(
book.code,
index,
chapters
) || reference?.checks
? 'cursor-pointer bg-th-primary-100'
: 'disabled cursor-default rounded-md bg-th-secondary-200 text-th-text-secondary-100'
} ${
index === reference?.chapter
? 'cursor-default rounded-md bg-th-primary-100 text-th-text-secondary-100'
: checkChapterVersesExist(
book.code,
index,
chapters
) || reference?.checks
? 'bg-th-secondary-200 hover:opacity-70'
: ''
}`}
key={index}
onClick={() =>
setReference((prev) => ({
...prev,
chapter: index,
}))
}
>
{index}
</button>
))}
</div>
</Disclosure.Panel>
</>
)
}}
</Disclosure>
))}
</Tab.Panel>
))}
</Tab.Panels>
</Tab.Group>
</div>
</Card>
)
}

export default BookListReader
Loading
Loading