import React from "react"; import { useIntl } from "react-intl"; import { WindowTitle } from "@saleor/components/WindowTitle"; import { API_URI } from "@saleor/config"; import useNavigator from "@saleor/hooks/useNavigator"; import useNotifier from "@saleor/hooks/useNotifier"; import useShop from "@saleor/hooks/useShop"; import { commonMessages } from "@saleor/intl"; import { maybe } from "@saleor/misc"; import ServiceDeleteDialog from "@saleor/services/components/ServiceDeleteDialog"; import ServiceTokenCreateDialog from "@saleor/services/components/ServiceTokenCreateDialog"; import ServiceTokenDeleteDialog from "@saleor/services/components/ServiceTokenDeleteDialog"; import { ServiceDeleteMutation, ServiceTokenCreateMutation, ServiceTokenDeleteMutation, ServiceUpdateMutation } from "@saleor/services/mutations"; import { ServiceDelete } from "@saleor/services/types/ServiceDelete"; import { ServiceTokenCreate } from "@saleor/services/types/ServiceTokenCreate"; import { ServiceTokenDelete } from "@saleor/services/types/ServiceTokenDelete"; import { ServiceUpdate } from "@saleor/services/types/ServiceUpdate"; import createDialogActionHandlers from "@saleor/utils/handlers/dialogActionHandlers"; import ServiceDetailsPage, { ServiceDetailsPageFormData } from "../../components/ServiceDetailsPage"; import { ServiceDetailsQuery } from "../../queries"; import { serviceListUrl, serviceUrl, ServiceUrlDialog, ServiceUrlQueryParams } from "../../urls"; interface OrderListProps { id: string; params: ServiceUrlQueryParams; token: string; onTokenClose: () => void; } export const ServiceDetails: React.FC = ({ id, params, token, onTokenClose }) => { const navigate = useNavigator(); const notify = useNotifier(); const intl = useIntl(); const shop = useShop(); React.useEffect(() => onTokenClose, []); const [openModal, closeModal] = createDialogActionHandlers< ServiceUrlDialog, ServiceUrlQueryParams >(navigate, params => serviceUrl(id, params), params); const onServiceUpdate = (data: ServiceUpdate) => { if (maybe(() => data.serviceAccountUpdate.errors.length === 0)) { notify({ text: intl.formatMessage(commonMessages.savedChanges) }); } }; const onServiceDelete = (data: ServiceDelete) => { if (data.serviceAccountDelete.errors.length === 0) { notify({ text: intl.formatMessage(commonMessages.savedChanges) }); navigate(serviceListUrl()); } }; const handleBack = () => navigate(serviceListUrl()); return ( {({ data, loading, refetch }) => { const onTokenCreate = (data: ServiceTokenCreate) => { if (maybe(() => data.serviceAccountTokenCreate.errors.length === 0)) { refetch(); } }; const onTokenDelete = (data: ServiceTokenDelete) => { if (maybe(() => data.serviceAccountTokenDelete.errors.length === 0)) { notify({ text: intl.formatMessage(commonMessages.savedChanges) }); refetch(); closeModal(); } }; return ( {(updateService, updateServiceOpts) => ( {(deleteService, deleteServiceOpts) => ( {(createToken, createTokenOpts) => ( {(deleteToken, deleteTokenOpts) => { const handleSubmit = ( data: ServiceDetailsPageFormData ) => updateService({ variables: { id, input: { isActive: data.isActive, name: data.name, permissions: data.hasFullAccess ? shop.permissions.map( permission => permission.code ) : data.permissions } } }); const handleRemoveConfirm = () => deleteService({ variables: { id } }); const handleTokenCreate = (name: string) => createToken({ variables: { input: { name, serviceAccount: id } } }); const handleTokenDelete = () => deleteToken({ variables: { id: params.id } }); return ( <> data.serviceAccount.name)} /> updateServiceOpts.data.serviceAccountUpdate .errors )} token={token} onApiUriClick={() => open(API_URI, "blank")} onBack={handleBack} onDelete={() => openModal("remove")} onSubmit={handleSubmit} onTokenClose={onTokenClose} onTokenCreate={() => openModal("create-token")} onTokenDelete={id => openModal("remove-token", { id }) } permissions={maybe(() => shop.permissions)} service={maybe(() => data.serviceAccount)} saveButtonBarState={updateServiceOpts.status} /> data.serviceAccount.name, "..." )} onClose={closeModal} onConfirm={handleRemoveConfirm} open={params.action === "remove"} /> createTokenOpts.data .serviceAccountTokenCreate.authToken )} /> { const token = data.serviceAccount.tokens.find( token => token.id === params.id ); if (token.name) { return token.name; } return `**** ${token.authToken}`; }, "...")} onClose={closeModal} onConfirm={handleTokenDelete} open={params.action === "remove-token"} /> ); }} )} )} )} ); }} ); }; export default ServiceDetails;