@@ -349,92 +349,95 @@ export const useProgram = (programId: string) => {
349349 contents : ProgramContentProps [ ]
350350 } ) [ ]
351351 } )
352- | null =
353- loading || error || ! data || ! data . program_by_pk
354- ? null
355- : {
356- id : data . program_by_pk . id ,
357- coverUrl : data . program_by_pk . cover_url ,
358- title : data . program_by_pk . title ,
359- abstract : data . program_by_pk . abstract ,
360- publishedAt : new Date ( data . program_by_pk . published_at ) ,
361- isSubscription : data . program_by_pk . is_subscription ,
362- isSoldOut : data . program_by_pk . is_sold_out ,
363- listPrice : data . program_by_pk . list_price ,
364- salePrice : data . program_by_pk . sale_price ,
365- soldAt : data . program_by_pk . sold_at && new Date ( data . program_by_pk . sold_at ) ,
366- description : data . program_by_pk . description ,
367- coverVideoUrl : data . program_by_pk . cover_video_url ,
368- isIssuesOpen : data . program_by_pk . is_issues_open ,
369- isPrivate : data . program_by_pk . is_private ,
370- isCountdownTimerVisible : data . program_by_pk . is_countdown_timer_visible ,
371- isIntroductionSectionVisible : data . program_by_pk . is_introduction_section_visible ,
372- tags : data . program_by_pk . program_tags . map ( programTag => programTag . tag . name ) ,
373- categories : data . program_by_pk . program_categories . map ( programCategory => ( {
374- id : programCategory . category . id ,
375- name : programCategory . category . name ,
376- } ) ) ,
377- roles : data . program_by_pk . program_roles . map ( programRole => ( {
378- id : programRole . id ,
379- name : programRole . name as ProgramRoleName ,
380- memberId : programRole . member_id ,
381- memberName : programRole . member_id ,
382- } ) ) ,
383- plans : data . program_by_pk . program_plans . map ( programPlan => ( {
384- id : programPlan . id ,
385- type : programPlan . type === 1 ? 'subscribeFromNow' : programPlan . type === 2 ? 'subscribeAll' : 'unknown' ,
386- title : programPlan . title || '' ,
387- description : programPlan . description ,
388- gains : programPlan . gains ,
389- currency : {
390- id : programPlan . currency . id ,
391- label : programPlan . currency . label ,
392- unit : programPlan . currency . unit ,
393- name : programPlan . currency . name ,
394- } ,
395- listPrice : programPlan . list_price ,
396- salePrice : programPlan . sale_price ,
397- soldAt : programPlan . sold_at && new Date ( programPlan . sold_at ) ,
398- discountDownPrice : programPlan . discount_down_price ,
399- periodAmount : programPlan . period_amount ,
400- periodType : programPlan . period_type as PeriodType ,
401- startedAt : programPlan . started_at ,
402- endedAt : programPlan . ended_at ,
403- isParticipantsVisible : programPlan . is_participants_visible ,
404- publishedAt : programPlan . published_at ,
405- isCountdownTimerVisible : programPlan . is_countdown_timer_visible ,
406- } ) ) ,
407- contentSections : data . program_by_pk . program_content_sections . map ( programContentSection => ( {
408- id : programContentSection . id ,
409- title : programContentSection . title ,
410- description : programContentSection . description ,
411- contents : programContentSection . program_contents . map ( programContent => ( {
412- id : programContent . id ,
413- title : programContent . title ,
414- abstract : programContent . abstract ,
415- metadata : programContent . metadata ,
416- duration : programContent . duration ,
417- contentType :
418- programContent . program_content_videos . length > 0
419- ? 'video'
420- : programContent . program_content_type ?. type || '' ,
421- publishedAt : new Date ( programContent . published_at ) ,
422- listPrice : programContent . list_price ,
423- salePrice : programContent . sale_price ,
424- soldAt : programContent . sold_at && new Date ( programContent . sold_at ) ,
425- materials : programContent . program_content_materials . map ( v => ( {
426- id : v . id ,
427- data : v . data ,
428- createdAt : v . created_at ,
429- } ) ) ,
430- videos : programContent . program_content_videos . map ( v => ( {
431- id : v . attachment . id ,
432- size : v . attachment . size ,
433- options : v . attachment . options ,
352+ | null = useMemo (
353+ ( ) =>
354+ loading || error || ! data || ! data . program_by_pk
355+ ? null
356+ : {
357+ id : data . program_by_pk . id ,
358+ coverUrl : data . program_by_pk . cover_url ,
359+ title : data . program_by_pk . title ,
360+ abstract : data . program_by_pk . abstract ,
361+ publishedAt : new Date ( data . program_by_pk . published_at ) ,
362+ isSubscription : data . program_by_pk . is_subscription ,
363+ isSoldOut : data . program_by_pk . is_sold_out ,
364+ listPrice : data . program_by_pk . list_price ,
365+ salePrice : data . program_by_pk . sale_price ,
366+ soldAt : data . program_by_pk . sold_at && new Date ( data . program_by_pk . sold_at ) ,
367+ description : data . program_by_pk . description ,
368+ coverVideoUrl : data . program_by_pk . cover_video_url ,
369+ isIssuesOpen : data . program_by_pk . is_issues_open ,
370+ isPrivate : data . program_by_pk . is_private ,
371+ isCountdownTimerVisible : data . program_by_pk . is_countdown_timer_visible ,
372+ isIntroductionSectionVisible : data . program_by_pk . is_introduction_section_visible ,
373+ tags : data . program_by_pk . program_tags . map ( programTag => programTag . tag . name ) ,
374+ categories : data . program_by_pk . program_categories . map ( programCategory => ( {
375+ id : programCategory . category . id ,
376+ name : programCategory . category . name ,
377+ } ) ) ,
378+ roles : data . program_by_pk . program_roles . map ( programRole => ( {
379+ id : programRole . id ,
380+ name : programRole . name as ProgramRoleName ,
381+ memberId : programRole . member_id ,
382+ memberName : programRole . member_id ,
383+ } ) ) ,
384+ plans : data . program_by_pk . program_plans . map ( programPlan => ( {
385+ id : programPlan . id ,
386+ type : programPlan . type === 1 ? 'subscribeFromNow' : programPlan . type === 2 ? 'subscribeAll' : 'unknown' ,
387+ title : programPlan . title || '' ,
388+ description : programPlan . description ,
389+ gains : programPlan . gains ,
390+ currency : {
391+ id : programPlan . currency . id ,
392+ label : programPlan . currency . label ,
393+ unit : programPlan . currency . unit ,
394+ name : programPlan . currency . name ,
395+ } ,
396+ listPrice : programPlan . list_price ,
397+ salePrice : programPlan . sale_price ,
398+ soldAt : programPlan . sold_at && new Date ( programPlan . sold_at ) ,
399+ discountDownPrice : programPlan . discount_down_price ,
400+ periodAmount : programPlan . period_amount ,
401+ periodType : programPlan . period_type as PeriodType ,
402+ startedAt : programPlan . started_at ,
403+ endedAt : programPlan . ended_at ,
404+ isParticipantsVisible : programPlan . is_participants_visible ,
405+ publishedAt : programPlan . published_at ,
406+ isCountdownTimerVisible : programPlan . is_countdown_timer_visible ,
407+ } ) ) ,
408+ contentSections : data . program_by_pk . program_content_sections . map ( programContentSection => ( {
409+ id : programContentSection . id ,
410+ title : programContentSection . title ,
411+ description : programContentSection . description ,
412+ contents : programContentSection . program_contents . map ( programContent => ( {
413+ id : programContent . id ,
414+ title : programContent . title ,
415+ abstract : programContent . abstract ,
416+ metadata : programContent . metadata ,
417+ duration : programContent . duration ,
418+ contentType :
419+ programContent . program_content_videos . length > 0
420+ ? 'video'
421+ : programContent . program_content_type ?. type || '' ,
422+ publishedAt : new Date ( programContent . published_at ) ,
423+ listPrice : programContent . list_price ,
424+ salePrice : programContent . sale_price ,
425+ soldAt : programContent . sold_at && new Date ( programContent . sold_at ) ,
426+ materials : programContent . program_content_materials . map ( v => ( {
427+ id : v . id ,
428+ data : v . data ,
429+ createdAt : v . created_at ,
430+ } ) ) ,
431+ videos : programContent . program_content_videos . map ( v => ( {
432+ id : v . attachment . id ,
433+ size : v . attachment . size ,
434+ options : v . attachment . options ,
435+ } ) ) ,
434436 } ) ) ,
435437 } ) ) ,
436- } ) ) ,
437- }
438+ } ,
439+ [ data , error , loading ] ,
440+ )
438441
439442 return {
440443 loadingProgram : loading ,
0 commit comments