pageMerge.js 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. function PageMerge(props) {
  2. const { useRef, useState, useEffect } = React;
  3. const { userImage, userDemo, userTemplate } = props;
  4. const [ loading, setLoading ] = useState(false);
  5. const refDisplayImage = useRef();
  6. const _self = this;
  7. function goNext(_mergeImage) {
  8. props.next(_mergeImage);
  9. }
  10. function goBack() {
  11. props.back();
  12. }
  13. function doFaceMerge() {
  14. return new Promise((resolve, reject) => {
  15. const faceFusionAPI = new FaceFusionAPI();
  16. faceFusionAPI.start(
  17. userTemplate,
  18. userImage,
  19. 0.29,
  20. async (_merge_image: string) => {
  21. resolve(_merge_image);
  22. },
  23. (errMsg: string) => {
  24. reject(new Error(errMsg));
  25. },
  26. );
  27. });
  28. }
  29. function mergeFace() {
  30. setLoading(true);
  31. doFaceMerge().then((_mergeImage) => {
  32. setLoading(false);
  33. goNext(_mergeImage);
  34. }).catch((error) => {
  35. console.log('MergeFace error: \n' + error.name + 'Message: \n' + error.message);
  36. if (confirm('融合失敗, 是否要再試一次?')) {
  37. mergeFace();
  38. } else {
  39. goBack();
  40. }
  41. });
  42. }
  43. useEffect(() => {
  44. mergeFace();
  45. return () => {};
  46. }, []);
  47. return (
  48. <div class="mergePage">
  49. <div class="mergePage__header">
  50. <div class="btn__back">
  51. <img src="https://d1xzlli46wohoc.cloudfront.net/assets/images/btn-retake.png" alt="" />
  52. </div>
  53. </div>
  54. <div class="mergePage__body">
  55. <div class="mergePage__title">
  56. <img src="https://d1xzlli46wohoc.cloudfront.net/assets/images/merge-title.png" alt="" />
  57. </div>
  58. <div class="mergePage__demo">
  59. <div class="mergePage__picture">
  60. <img ref={refDisplayImage} src={userDemo}/>
  61. </div>
  62. {
  63. (loading) ? (<div class="mergePage__loader">
  64. <div class="loader-46"></div>
  65. <div class="loader__text">您的專屬菜單正在輸出...</div>
  66. </div>) : ('')
  67. }
  68. </div>
  69. </div>
  70. <div class="mergePage__footer"></div>
  71. </div>
  72. );
  73. }