<commit_before>import React from 'react';
import { useQuery, useMutation, gql, useSession } from 'bonde-core-tools';
import { MailchimpStart } from './types';
import {
  Heading,
  Flex,
  Button,
  Text,
  Stack,
  Success,
  toast,  
} from 'bonde-components';

const fetchGraphqlQuery = gql`
query($id:Int!, $is_community:Boolean!) {
  resync_mailchimp_status(
    is_community: $is_community
    id: $id
  ) {
    active
    completed
    failed
    last_sync
    waiting
    status
  }
}
`
const fetchGraphqlMutation = gql`
mutation($id:Int!, $is_community:Boolean!) {
  resync_mailchimp_start(
    is_community: $is_community
    id: $id
  ) {
    status
  }
}
`
export default () => {
  const { community } = useSession();
  const { data, loading, error } = useQuery(
    fetchGraphqlQuery,
    {
      variables: { is_community: true, id: community?.id },
      pollInterval: 5000,
    },
  );
  const [setPropagating] = useMutation(
    fetchGraphqlMutation,
    { variables: { is_community: true, id: community?.id }, skip: true }
  );

  const done = async () => {
    const a: MailchimpStart = await setPropagating();
    if (typeof a !== 'undefined' && 
        typeof a.data.resync_mailchimp_start.status !== 'undefined' &&
        a.data.resync_mailchimp_start.status == 'started to add contacts to the queue') {
      toast(<Success message={`Ae! Sincronização em andamento.`} />, { type: toast.TYPE.SUCCESS });
    } else {
      toast(`Falha na atualização da base de contatos do mailchimp! ${a.data.resync_mailchimp_start.status}`, { type: toast.TYPE.ERROR });
    }
  };
  if (loading) return <Text>Carregando Mailchimp Status</Text>;
  else if (error) return <Text>Failed ${error}</Text>;

  return <Stack>
    <Heading as="h4" size="sm">Forçar sincronização</Heading>
    <Text>Sua base no Mailchimp não está atualizada? Tudo bem! Clique em sincronizar pra dar um empurrãozinho:</Text>
    <Heading as="h4" size="sm">Status</Heading>
    <Text size="sm">Data da última atualização: {(typeof data.resync_mailchimp_status.last_sync === 'undefined' ? '-' : data.resync_mailchimp_status.last_sync)}</Text>
    <Text size="sm">Total de sincronizações com sucesso: {data.resync_mailchimp_status.completed}</Text>
    <Text size="sm">Total de falhas na sincronização: {data.resync_mailchimp_status.failed}</Text>
    <Text size="sm">Total de sincronizações ativas: {data.resync_mailchimp_status.active}</Text>
    <Flex justifyContent="flex-end">
      <Button onClick={done} disabled={(data.resync_mailchimp_status.active > 0 || data.resync_mailchimp_status.waiting > 0)} type='button' marginTop={4}>Sincronizar</Button>
    </Flex>
  </Stack>
}<commit_msg>chore: change synchronization status format<commit_after>import React from 'react';
import { useQuery, useMutation, gql, useSession } from 'bonde-core-tools';
import { MailchimpStart } from './types';
import {
  Heading,
  Flex,
  Button,
  Text,
  Stack,
  Success,
  toast,  
} from 'bonde-components';

const fetchGraphqlQuery = gql`
query($id:Int!, $is_community:Boolean!) {
  resync_mailchimp_status(
    is_community: $is_community
    id: $id
  ) {
    active
    completed
    failed
    last_sync
    waiting
    status
  }
}
`
const fetchGraphqlMutation = gql`
mutation($id:Int!, $is_community:Boolean!) {
  resync_mailchimp_start(
    is_community: $is_community
    id: $id
  ) {
    status
  }
}
`
export default () => {
  const { community } = useSession();
  const { data, loading, error } = useQuery(
    fetchGraphqlQuery,
    {
      variables: { is_community: true, id: community?.id },
      pollInterval: 5000,
    },
  );
  const [setPropagating] = useMutation(
    fetchGraphqlMutation,
    { variables: { is_community: true, id: community?.id }, skip: true }
  );

  const done = async () => {
    const a: MailchimpStart = await setPropagating();
    if (typeof a !== 'undefined' && 
        typeof a.data.resync_mailchimp_start.status !== 'undefined' &&
        a.data.resync_mailchimp_start.status == 'started to add contacts to the queue') {
      toast(<Success message={`Ae! Sincronização em andamento.`} />, { type: toast.TYPE.SUCCESS });
    } else {
      toast(`Falha na atualização da base de contatos do mailchimp! ${a.data.resync_mailchimp_start.status}`, { type: toast.TYPE.ERROR });
    }
  }; 

  if (loading) return <Text>Carregando Mailchimp Status</Text>;
  else if (error) return <Text>Failed ${error}</Text>;

  if (data.resync_mailchimp_status.active > 0 || data.resync_mailchimp_status.waiting > 0){
    return <Stack>
      <Heading as="h4" size="sm">Forçar sincronização</Heading>
      <Text>Sua base no Mailchimp não está atualizada? Tudo bem! Clique em sincronizar pra dar um empurrãozinho:</Text>
      <Heading as="h4" size="sm">Status da sincronização</Heading>
      <Text size="sm">{data.resync_mailchimp_status.status}</Text>
      <Flex justifyContent="flex-end">
        <Button onClick={done} disabled='true' type='button' marginTop={4}>Sincronizar</Button>
      </Flex>
    </Stack>
  }
  
  return <Stack>
    <Heading as="h4" size="sm">Forçar sincronização</Heading>
    <Text>Sua base no Mailchimp não está atualizada? Tudo bem! Clique em sincronizar pra dar um empurrãozinho:</Text>
    <Heading as="h4" size="sm">Status</Heading>
    <Text size="sm">{data.resync_mailchimp_status.status}</Text>
    <Text size="sm">Data da última atualização: {(typeof data.resync_mailchimp_status.last_sync === 'undefined' ? '-' : data.resync_mailchimp_status.last_sync)}</Text>
    <Flex justifyContent="flex-end">
      <Button onClick={done} type='button' marginTop={4}>Sincronizar</Button>
    </Flex>
  </Stack>
}
{'fraction_non_alphanumeric': 0.1392876129718235, 'fraction_numerical': 0.003721424774056353, 'mean_word_length': 3.8908145580589255, 'pattern_counts': {'":': 0, '<': 63, '<?xml version=': 0, '>': 71, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2018444', 'n_tokens_mistral': 1975, 'n_tokens_neox': 1927, 'n_words': 429}