import './requestPermission.scss'; import React, { useContext, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { toast } from 'react-toastify'; import Button from '../../components/Button'; import ImageIcon from '../../components/ImageIcon'; import Modal from '../../components/Modal'; import { MiniAppContext, IPreviewImage } from '../../context/miniAppContext'; import { editUserPermission } from '../../factory/api'; import { joinWorkspaceImg } from '../../utils/helperFunctions'; import EmailAddress from './EmailAddress'; import MandatoryInfo from './MandatoryInfo'; import PermissionProfile, { PermissionType } from './PermissionProfile'; export interface RequestPermissionProps { visible: boolean; toggleVisible: (v: boolean) => void; permissionInfo: any; successCB: (res: any) => void; failCB: () => void; profileInfo: any; } const RequestPermission: React.FC = (props) => { const { visible, toggleVisible, permissionInfo, successCB, failCB, profileInfo, } = props; const { state } = useContext(MiniAppContext); const [previewImg, setPreviewImg] = useState(); const [type, setType] = useState('paypay_information'); const [subVisible, setSubVisible] = useState(false); const [mandatoryVisible, setMandatoryVisible] = useState(false); const { t } = useTranslation(); const [emailVisible, setEmailVisible] = useState(false); const [permissionInfoState, setPermissionInfoState] = useState({ paypay_information: {}, profile_info: {}, device_info: {}, }); const [isBlocker, setIsBlocker] = useState(false); const [isShowEmail, setIsShowEmail] = useState(false); const [isShowProfile, setIsShowProfile] = useState(false); useEffect(() => { setPermissionInfoState(permissionInfo); }, [permissionInfo]); useEffect(() => { const previewImgData = state.headerImage && state.headerImage.length > 0 ? { 'background-image': `url(${joinWorkspaceImg(state.headerImage)})`, 'background-size': 'cover', } : { background: '#fff', }; setPreviewImg(previewImgData); }, [state.headerImage]); const openSubInfoModal = (type: PermissionType) => { setType(type); setSubVisible(true); }; const toggleSwitch = (type: PermissionType, index: number) => { permissionInfoState[type][index].checked = !permissionInfoState[type][index] .checked; setPermissionInfoState({ ...permissionInfoState }); }; const [previewImgs, setPreviewImgs] = useState>( [] ); useEffect(() => { if (state.previewImagesV2 && state.previewImagesV2.length > 0) { setPreviewImgs(state.previewImagesV2); } else if (state.previewImages && state.previewImages.length > 0) { setPreviewImgs(state.previewImages); } }, [state.previewImages, state.previewImagesV2]); const openPreview = (img: string | IPreviewImage) => { if (img.link && img.link.length > 0) { window.postMessage( JSON.stringify({ event: 'openWebview', payload: { style: 'modal', url: img.link, }, }), '*' ); } }; const joinWorkspaceImgPreview = (img: string | IPreviewImage) => { if (typeof img === 'string') { return joinWorkspaceImg(img); } else { return joinWorkspaceImg(img.path); } }; const agreeAction = async () => { const isShowEmail = !!profileInfo.email; const emailItem = permissionInfoState['paypay_information'].find( (item: any) => item.name === 'mini_app_user_email_address' ); const isBlocker = emailItem.type === 'must' && emailItem.isBlocker; const isShowProfile = !( profileInfo.photoUrl && profileInfo.displayName && profileInfo.firstName && profileInfo.lastName && profileInfo.lastNameKana && profileInfo.firstNameKana ); if (isShowEmail || isShowProfile) { setIsShowEmail(isShowEmail); setIsShowProfile(isShowProfile); setIsBlocker(isBlocker); setMandatoryVisible(true); } else { try { const params = Object.keys(permissionInfoState).reduce( (res: any, ns) => { permissionInfoState[ns].forEach((element: any) => { if (element.checked) { res.add = [...res.add, element.name]; } else { res.remove = [...res.remove, element.name]; } }); return res; }, { add: [], remove: [] } ); const response: any = await editUserPermission(params); if (response?.data?.signed?.result_info?.code === 'SUCCESS') { successCB(response.data.unsigned.data.scopes); } } catch (error) { toast.error('Edit permisions failed.'); } finally { toggleVisible(false); } } }; return (
{profileInfo.photoUrl ? ( ) : null}
{state.appName}
{previewImgs && previewImgs.length > 0 ? (
{previewImgs.map((img: string | IPreviewImage) => { return (
openPreview(img)} >
); })}
) : null}
サービス提供者に対して以下の情報を提供します
openSubInfoModal('paypay_information')} >
{t('permissionCategory.paypay_information')}
openSubInfoModal('profile_info')} >
{t('permissionCategory.profile_info')}
openSubInfoModal('device_info')} >
{t('permissionCategory.device_info')}
{/*
以下に同意します
あいうえおの利用規約
プライバシーポリシー
フリーテキストフリーテキストフリーテキストフリーテキストフリーテキストフリーテキスト
*/}
この機能は会社名会社名会社名が提供するサービスであり、 PayPayのサービスではありません
); }; export default RequestPermission;