import NotFoundPage from "@saleor/components/NotFoundPage"; 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 { getStringOrPlaceholder, 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 React from "react"; import { useIntl } from "react-intl"; 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({ status: "success", text: intl.formatMessage(commonMessages.savedChanges) }); } }; const onServiceDelete = (data: ServiceDelete) => { if (data.serviceAccountDelete.errors.length === 0) { notify({ status: "success", text: intl.formatMessage(commonMessages.savedChanges) }); navigate(serviceListUrl()); } }; const handleBack = () => navigate(serviceListUrl()); return ( {({ data, loading, refetch }) => { const service = data?.serviceAccount; if (service === null) { return ; } const onTokenCreate = (data: ServiceTokenCreate) => { if (maybe(() => data.serviceAccountTokenCreate.errors.length === 0)) { refetch(); } }; const onTokenDelete = (data: ServiceTokenDelete) => { if (maybe(() => data.serviceAccountTokenDelete.errors.length === 0)) { notify({ status: "success", 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 ( <> open(API_URI, "blank")} onBack={handleBack} onDelete={() => openModal("remove")} onSubmit={handleSubmit} onTokenClose={onTokenClose} onTokenCreate={() => openModal("create-token")} onTokenDelete={id => openModal("remove-token", { id }) } permissions={shop?.permissions} service={data?.serviceAccount} saveButtonBarState={updateServiceOpts.status} /> { 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;