Ringtone app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

106 lines
2.6 KiB

  1. import {GetServerSideProps, NextPage} from 'next';
  2. import BrowseRingtonesTemplate from '../components/templates/BrowseRingtones';
  3. import {getSession, Session} from '@auth0/nextjs-auth0';
  4. import {models} from '@tonality/library-common';
  5. import RingtoneClient from '../modules/ringtone/client';
  6. import {useEffect, useState} from 'react';
  7. import getFormValues from '@theoryofnekomata/formxtra';
  8. import {useRouter} from 'next/router';
  9. type Props = {
  10. session: Partial<Session>,
  11. ringtones: models.Ringtone[],
  12. skip: number,
  13. take: number,
  14. total: number,
  15. }
  16. const IndexPage: NextPage<Props> = ({
  17. session,
  18. ringtones: ringtonesProp,
  19. skip: skipProp,
  20. take: takeProp,
  21. total: totalProp,
  22. }) => {
  23. const [ringtoneClient, setRingtoneClient] = useState<RingtoneClient>(null)
  24. const [ringtones, setRingtones] = useState(ringtonesProp)
  25. const [skip, setSkip] = useState(skipProp)
  26. const [take, setTake] = useState(takeProp)
  27. const [total, setTotal] = useState(totalProp)
  28. const [loading, setLoading] = useState(false)
  29. const router = useRouter()
  30. const getNextPage = async (e) => {
  31. // e.preventDefault()
  32. // const values = getFormValues(e.target)
  33. // setLoading(true)
  34. // try {
  35. // const {data: ringtones, skip, take, total} = await ringtoneClient.browse({
  36. // skip: Number(values.skip),
  37. // take: Number(values.take)
  38. // })
  39. // setRingtones(ringtones)
  40. // setSkip(skip)
  41. // setTake(take)
  42. // setTotal(total)
  43. // router.push({
  44. // query: {
  45. // skip: Number(values.skip),
  46. // take: Number(values.take),
  47. // },
  48. // })
  49. // } catch (err) {
  50. // console.log(err)
  51. // }
  52. // setLoading(false)
  53. }
  54. useEffect(() => {
  55. setRingtoneClient(new RingtoneClient(process.env.NEXT_PUBLIC_API_BASE_URL, session))
  56. }, [])
  57. return (
  58. <BrowseRingtonesTemplate
  59. session={session}
  60. ringtones={ringtones}
  61. skip={skip}
  62. take={take}
  63. total={total}
  64. loading={loading}
  65. onNextPage={getNextPage}
  66. />
  67. );
  68. };
  69. export const getServerSideProps: GetServerSideProps = async ({ req, res, query }) => {
  70. const authSession = getSession(req, res)
  71. const session = authSession
  72. ? {
  73. idToken: authSession.idToken,
  74. token_type: authSession.token_type,
  75. user: authSession.user,
  76. }
  77. : null
  78. const client = new RingtoneClient(process.env.NEXT_PUBLIC_API_BASE_URL, session)
  79. const browseParams: { skip: number, take: number } = {} as any
  80. if (query.skip) {
  81. browseParams.skip = Number(query.skip)
  82. }
  83. if (query.skip) {
  84. browseParams.take = Number(query.take)
  85. }
  86. const { data: ringtones, skip, take, total } = await client.browse(browseParams)
  87. return {
  88. props: {
  89. session,
  90. ringtones,
  91. skip,
  92. take,
  93. total,
  94. }
  95. }
  96. }
  97. export default IndexPage;