@s_mart/minha-conta 16.1.0 → 16.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/api/index.ts","../src/utils/getPeriodicidadeLabel.ts","../src/components/meuPlanoInfo/components/skeleton.tsx","../src/api/queries.ts","../src/components/loading/loading.tsx","../src/hooks/useToken.ts","../src/store/app/app.static.ts","../src/store/app/useAppStore.tsx","../src/store/minhaConta/minhaConta.static.ts","../src/store/minhaConta/createMinhaContaStore.ts","../src/context/minhaContaProvider.tsx","../src/components/meuPlanoInfo/components/buttonPlanos.tsx","../src/components/meuPlanoInfo/components/detalhes.tsx","../src/components/meuPlanoInfo/meuPlanoInfo.static.ts","../src/components/meuPlanoInfo/useMeuPlanoInfo.ts","../src/components/meuPlanoInfo/meuPlanoInfo.tsx","../src/utils/parseError.ts","../src/context/notificationProvider.tsx","../src/hooks/useDialog.ts","../src/utils/openWhatsapp.ts","../src/components/planosDialog/contratarRecursos/listaRecursos/listaRecursos.styles.ts","../src/components/planosDialog/contratarRecursos/listaRecursos/listaRecursos.tsx","../src/components/planosDialog/contratarRecursos/confirmacaoDialog/useConfirmacaoDialog.ts","../src/components/planosDialog/contratarRecursos/confirmacaoDialog/confirmacaoDialog.tsx","../src/components/planosDialog/contratarRecursos/planoShowcase/planoShowcase.styles.ts","../src/components/planosDialog/contratarRecursos/planoShowcase/usePlanoShowcase.ts","../src/components/planosDialog/contratarRecursos/planoShowcase/planoShowcase.tsx","../src/components/planosDialog/contratarRecursos/contratarRecursos.tsx","../src/components/planosDialog/emptyState/emptyState.tsx","../src/components/planosDialog/listagemPlanos/listagemPlanos.styles.ts","../src/components/planosDialog/listagemPlanos/plano/plano.styles.ts","../src/components/planosDialog/listagemPlanos/plano/plano.tsx","../src/components/planosDialog/listagemPlanos/useListagemPlanos.ts","../src/components/planosDialog/listagemPlanos/listagemPlanos.tsx","../src/components/planosDialog/loading/loading.tsx","../src/components/planosDialog/planosDialog.static.ts","../src/components/planosDialog/usePlanosDialog.ts","../src/components/planosDialog/planosDialog.tsx","../src/components/planosDialog/planosDialogExport.tsx","../src/components/recursosDialog/confirmacaoAdquirirDialog/confirmacaoAdquirirDialog.tsx","../src/components/recursosDialog/confirmacaoRemoverDialog/confirmacaoRemoverDialog.tsx","../src/components/recursosDialog/emptyState/emptyState.tsx","../src/components/recursosDialog/gifDialog/gifDialog.styles.ts","../src/components/recursosDialog/gifDialog/gifDialog.tsx","../src/components/recursosDialog/recurso/recurso.styles.ts","../src/components/recursosDialog/recurso/recurso.tsx","../src/components/recursosDialog/useRecursosDialog.ts","../src/components/recursosDialog/recursosDialog.tsx","../src/components/recursosDialog/recursosDialogExport.tsx","../src/context/minhaContaQueryProvider.tsx","../src/screens/confirmarEmail/api/index.ts","../src/screens/confirmarEmail/confirmarEmail.styles.ts","../src/screens/confirmarEmail/useConfirmarEmail.ts","../src/screens/confirmarEmail/confirmarEmail.tsx","../src/shared/styles.ts","../src/screens/meuPlano/faturas/alterarEmailCobrancaDialog/useAlterarEmailCobrancaDialog.tsx","../src/screens/meuPlano/faturas/alterarEmailCobrancaDialog/alterarEmailCobrancaDialog.tsx","../src/screens/meuPlano/faturas/emptyState/emptyState.tsx","../src/screens/meuPlano/faturas/useFaturas.tsx","../src/helpers/contrateApi/meusDadosApi.types.ts","../src/screens/meuPlano/faturas/useProximaFatura.tsx","../src/screens/meuPlano/faturas/faturas.tsx","../src/screens/meuPlano/termosDeUso/termosDeUso.tsx","../src/screens/meuPlano/useMeuPlano.ts","../src/screens/meuPlano/meuPlano.tsx","../src/screens/minhaEmpresa/dadosEmpresa/dadosEmpresa.styles.ts","../src/screens/minhaEmpresa/dadosEmpresa/useDadosEmpresa.ts","../src/screens/minhaEmpresa/dadosEmpresa/dadosEmpresa.tsx","../src/screens/minhaEmpresa/dadosEndereco/useDadosEndereco.ts","../src/screens/minhaEmpresa/dadosEndereco/dadosEndereco.tsx","../src/screens/minhaEmpresa/dadosResponsavel/dadosResponsavel.tsx","../src/screens/minhaEmpresa/header/useHeader.ts","../src/screens/minhaEmpresa/header/header.tsx","../src/screens/minhaEmpresa/minhaEmpresa.helpers.ts","../src/screens/minhaEmpresa/useMinhaEmpresa.ts","../src/screens/minhaEmpresa/minhaEmpresa.tsx","../src/screens/minhaConta/useMinhaConta.tsx","../src/screens/minhaConta/minhaConta.tsx"],"sourcesContent":["import axios, { type AxiosInstance } from 'axios';\nimport type { BuscarPlanosEGruposPayload, BuscarPlanosEGruposResponse } from '../helpers/contrateApi/contrateApi.types';\nimport type {\n BuscarCepResponse,\n BuscarRntrcResponse,\n PesquisarDadosCidadeResponse,\n} from '../helpers/contrateApi/geralApi.types';\nimport type {\n AlterarPlanoPayload,\n AtualizarEmailsCobrancaBody,\n AtualizarMeusDadosBody,\n BuscarBoletoResponse,\n BuscarMeusDadosResponse,\n BuscarNfseResponse,\n BuscarPlanoPayload,\n BuscarPlanoResponse,\n ItemListarCobrancasResponse,\n MeuPlanoRecursosResponse,\n} from '../helpers/contrateApi/meusDadosApi.types';\nimport type { ApiResponse } from '../helpers/types';\n\nexport class ApiMinhaConta {\n private axiosSistema: AxiosInstance;\n private axiosControle: AxiosInstance;\n private listeners = new Set<() => void>();\n\n constructor(axiosInstance: AxiosInstance) {\n const isStaging = axiosInstance.defaults.baseURL?.includes('staging');\n const baseURL = isStaging\n ? 'https://apistaging-controle.sbsistemas.com.br'\n : 'https://apicontrole.sbsistemas.com.br';\n\n this.axiosControle = axios.create({ ...axiosInstance, baseURL });\n this.axiosSistema = axios.create(axiosInstance.defaults);\n }\n\n setToken(value: string) {\n let bearerToken = value;\n if (!value.startsWith('Bearer ')) {\n bearerToken = `Bearer ${bearerToken}`;\n }\n\n this.axiosSistema.defaults.headers.common.Authorization = bearerToken;\n this.axiosControle.defaults.headers.common.Authorization = bearerToken;\n\n this.notify();\n }\n\n get token(): string {\n return this.axiosSistema.defaults.headers.common.Authorization?.toString().replace('Bearer ', '') ?? '';\n }\n\n // Métodos existentes\n buscarMeusDados() {\n return this.axiosSistema.get<ApiResponse<BuscarMeusDadosResponse>>(`/meus-dados`);\n }\n\n atualizarMeusDados(body: AtualizarMeusDadosBody) {\n return this.axiosSistema.patch(`/meus-dados`, body);\n }\n\n buscarMeuPlanoRecursos() {\n return this.axiosSistema.get<ApiResponse<MeuPlanoRecursosResponse>>(`/meus-dados/meu-plano/recursos`);\n }\n\n contratarRecurso(codigoRecurso: number) {\n return this.axiosSistema.patch(`/meus-dados/plano/contratar-recurso/${codigoRecurso}`);\n }\n\n descontratarRecurso(codigoRecurso: number) {\n return this.axiosSistema.patch(`/meus-dados/plano/descontratar-recurso/${codigoRecurso}`);\n }\n\n buscarPlano(payload: BuscarPlanoPayload) {\n return this.axiosSistema.get<ApiResponse<BuscarPlanoResponse>>(`/meus-dados/plano-buscar/${payload.path.codigo}`, {\n params: payload.params,\n });\n }\n\n contratarPlano(plano: AlterarPlanoPayload) {\n return this.axiosSistema.patch(`/meus-dados/alterar-plano`, plano);\n }\n\n listarCobrancas() {\n return this.axiosSistema.get<ApiResponse<ItemListarCobrancasResponse[]>>(`/meus-dados/cobrancas`);\n }\n\n atualizarEmailCobranca(emails: AtualizarEmailsCobrancaBody) {\n return this.axiosSistema.patch(`/meus-dados/email-cobranca`, emails);\n }\n\n buscarBoleto(identificador: string) {\n return this.axiosSistema.get<ApiResponse<BuscarBoletoResponse>>(\n `/meus-dados/cobrancas/baixar-boleto/${identificador}`,\n );\n }\n\n buscarNfse(identificador: string) {\n return this.axiosSistema.get<ApiResponse<BuscarNfseResponse>>(`/meus-dados/cobrancas/baixar-nfse/${identificador}`);\n }\n\n listarPlanosEGrupos(payload: BuscarPlanosEGruposPayload) {\n const tipoPlano = window.location.hostname.includes('parceiro') ? 1 : 0;\n\n return this.axiosControle.get<ApiResponse<BuscarPlanosEGruposResponse>>('/contrate/planos-e-grupos', {\n params: { ...payload.params, tipoPlano },\n });\n }\n\n buscarRntrc(cnpj: string) {\n return this.axiosSistema.get<ApiResponse<BuscarRntrcResponse>>(`/rntrc?cnpj=${cnpj}`);\n }\n buscarCep(cep: string) {\n return this.axiosSistema.get<ApiResponse<BuscarCepResponse>>(`/cep/${cep}`);\n }\n pesquisarCidades(search: string) {\n return this.axiosSistema.get<ApiResponse<PesquisarDadosCidadeResponse[]>>(`/cidades?search=${search}`);\n }\n\n //// Métodos a ser utilizados com useSyncExternalStore\n subscriber(listener: () => void) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify() {\n this.listeners.forEach((listener) => listener());\n }\n}\n","type Modelo = 'mensalidade' | 'mensais' | 'mes';\n\ninterface GetPeriodicidadeLabelOptions {\n modelo?: Modelo;\n}\n\nconst getPeriodicidadeLabel = (periodicidade: number | null, options?: GetPeriodicidadeLabelOptions) => {\n const modelo = options?.modelo || 'mes';\n const _periodicidade = periodicidade ?? 0;\n\n const modelos: Record<Modelo, Record<number, string>> = {\n mes: { 0: 'mês', 1: 'tri', 2: 'sem', 3: 'ano' },\n mensais: { 0: 'mensais', 1: 'trimestrais', 2: 'semestrais', 3: 'anuais' },\n mensalidade: { 0: 'mensalidade', 1: 'trimestralidade', 2: 'semestralidade', 3: 'anualidade' },\n };\n\n return modelos[modelo][_periodicidade];\n};\n\nexport default getPeriodicidadeLabel;\n","import { Paper, Skeleton } from '@mui/material';\nimport { Grid } from '@mui/system';\n\nexport function MeuPlanoInfoSkeleton() {\n return (\n <Paper elevation={1} sx={{ padding: '1.5rem' }}>\n <Grid container spacing={1} sx={{\n justifyContent: 'center'\n }}>\n <Grid size={12}>\n <Skeleton height='1.3rem' style={{ transform: 'none' }} />\n </Grid>\n <Grid size={12} sx={{\n marginTop: '0.5rem'\n }}>\n <Skeleton height='3.5rem' style={{ transform: 'none' }} />\n </Grid>\n <Grid size={12} sx={{\n marginY: '1rem'\n }}>\n <Skeleton height='0.8rem' sx={{ transform: 'none' }} />\n <Skeleton height='0.8rem' sx={{ transform: 'none', marginY: '0.5rem' }} />\n <Skeleton height='0.8rem' sx={{ transform: 'none' }} />\n </Grid>\n <Grid size={6}>\n <Skeleton height='2rem' style={{ transform: 'none' }} />\n </Grid>\n <Grid size={6}>\n <Skeleton height='2rem' style={{ transform: 'none' }} />\n </Grid>\n </Grid>\n </Paper>\n );\n}\n","import { mutationOptions, queryOptions } from '@tanstack/react-query';\n\nimport type { BuscarPlanosEGruposPayload } from '../helpers/contrateApi/contrateApi.types';\nimport type {\n AlterarPlanoPayload,\n AtualizarEmailsCobrancaBody,\n AtualizarMeusDadosBody,\n BuscarPlanoPayload,\n} from '../helpers/contrateApi/meusDadosApi.types';\nimport type { ApiMinhaConta } from '.';\n\nconst queryKeys = {\n all: ['minha-conta'],\n buscarMeusDados() {\n return [...this.all, 'meus-dados'] as const;\n },\n buscarMeuPlanoRecursos() {\n return [...this.all, 'meu-plano'] as const;\n },\n buscarPlano(payload: BuscarPlanoPayload) {\n return [...this.all, 'plano', payload] as const;\n },\n listarCobrancas() {\n return [...this.buscarMeuPlanoRecursos(), 'cobrancas'] as const;\n },\n buscarBoleto(identificador: string) {\n return [...this.listarCobrancas(), 'boleto', identificador] as const;\n },\n buscarNfse(identificador: string) {\n return [...this.listarCobrancas(), 'Nfse', identificador] as const;\n },\n listarPlanosEGrupos(payload: BuscarPlanosEGruposPayload) {\n return [...this.all, 'listar-planos-e-grupos', payload];\n },\n\n buscarRntrc(cnpj: string) {\n return [...this.all, 'buscar-rntrc', cnpj];\n },\n buscarCep(cep: string) {\n return [...this.all, 'buscar-cep', cep];\n },\n pesquisarCidades(search: string) {\n return [...this.all, 'pesquisar-cidades', search];\n },\n} as const;\n\nexport const generateQueries = (endpoint: ApiMinhaConta) => {\n return {\n buscarMeusDados: () =>\n queryOptions({\n queryKey: queryKeys.buscarMeusDados(),\n queryFn: () => endpoint.buscarMeusDados(),\n }),\n buscarMeuPlanoRecursos: () =>\n queryOptions({\n queryKey: queryKeys.buscarMeuPlanoRecursos(),\n queryFn: () => endpoint.buscarMeuPlanoRecursos(),\n }),\n buscarPlano: (payload: BuscarPlanoPayload) =>\n queryOptions({\n queryKey: queryKeys.buscarPlano(payload),\n queryFn: () => endpoint.buscarPlano(payload),\n }),\n listarCobrancas: () =>\n queryOptions({\n queryKey: queryKeys.listarCobrancas(),\n queryFn: () => endpoint.listarCobrancas(),\n }),\n buscarBoleto: (identificador: string) =>\n queryOptions({\n queryKey: queryKeys.buscarBoleto(identificador),\n queryFn: () => endpoint.buscarBoleto(identificador),\n }),\n buscarNfse: (identificador: string) =>\n queryOptions({\n queryKey: queryKeys.buscarNfse(identificador),\n queryFn: () => endpoint.buscarNfse(identificador),\n }),\n listarPlanosEGrupos: (payload: BuscarPlanosEGruposPayload) =>\n queryOptions({\n queryKey: queryKeys.listarPlanosEGrupos(payload),\n queryFn: () => endpoint.listarPlanosEGrupos(payload),\n }),\n buscarRntrc: (cnpj: string) =>\n queryOptions({\n queryKey: queryKeys.buscarRntrc(cnpj),\n queryFn: () => endpoint.buscarRntrc(cnpj),\n }),\n buscarCep: (cep: string) =>\n queryOptions({\n queryKey: queryKeys.buscarCep(cep),\n queryFn: () => endpoint.buscarCep(cep),\n }),\n pesquisarCidades: (search: string) =>\n queryOptions({\n queryKey: queryKeys.pesquisarCidades(search),\n queryFn: () => endpoint.pesquisarCidades(search),\n }),\n } as const;\n};\n\nexport const generateMutations = (endpoint: ApiMinhaConta) => {\n return {\n atualizarMeusDados: () =>\n mutationOptions({\n mutationFn: (body: AtualizarMeusDadosBody) => endpoint.atualizarMeusDados(body),\n }),\n contratarRecurso: () =>\n mutationOptions({\n mutationFn: (codigoRecurso: number) => endpoint.contratarRecurso(codigoRecurso),\n }),\n descontratarRecurso: () =>\n mutationOptions({\n mutationFn: (codigoRecurso: number) => endpoint.descontratarRecurso(codigoRecurso),\n }),\n contratarPlano: () =>\n mutationOptions({\n mutationFn: (body: AlterarPlanoPayload) => endpoint.contratarPlano(body),\n }),\n atualizarEmailCobrancas: () =>\n mutationOptions({\n mutationFn: (emails: AtualizarEmailsCobrancaBody) =>\n endpoint.atualizarEmailCobranca(emails),\n }),\n } as const;\n};\n","import { Backdrop, CircularProgress } from '@mui/material';\n\nfunction Loading({ show }: { show: boolean }) {\n return (\n <Backdrop open={show} style={{ zIndex: 10000 }}>\n <CircularProgress size={50} sx={{ color: (theme) => theme.palette.primary.main }} />\n </Backdrop>\n );\n}\n\nexport default Loading;\n","import { useSyncExternalStore } from 'react';\nimport type { ApiMinhaConta } from '../api';\n\nexport const useToken = (api: ApiMinhaConta) =>\n useSyncExternalStore(\n (listener) => api.subscriber(listener),\n () => api.token,\n );\n","import type { AppStoreState } from './app.types';\n\nexport const appStoreInitialState: AppStoreState = {\n loading: false,\n};\n","import { create } from 'zustand';\n\nimport { appStoreInitialState } from './app.static';\nimport type { AppStore } from './app.types';\n\nexport const useAppStore = create<AppStore>((setState) => ({\n ...appStoreInitialState,\n setLoading: (loading) => setState({ loading }),\n resetState: () => setState(appStoreInitialState),\n}));\n","import type { MinhaContaStoreState } from './minhaConta.types';\n\nexport const minhaContaStoreInitialState: MinhaContaStoreState = {\n tabAtiva: 'minhaEmpresa',\n sistemaNome: '',\n telefoneSuporte: '',\n telefoneCS: '',\n minhaEmpresa: {},\n meuPlano: {},\n recursosDialog: {},\n planosDialog: {},\n};\n","import { create, createStore } from 'zustand';\n\nimport { minhaContaStoreInitialState } from './minhaConta.static';\nimport type { MinhaContaStore } from './minhaConta.types';\nimport type { MinhaContaStoreState } from './minhaConta.types';\n\nexport const createMinhaContaStore = (initialValues?: Partial<MinhaContaStoreState>) =>\n createStore<MinhaContaStore>()((setState) => ({\n ...minhaContaStoreInitialState,\n ...initialValues,\n setTabAtiva: (tabAtiva) => setState({ tabAtiva }),\n }));\n","import { useQueryClient } from '@tanstack/react-query';\nimport { jwtDecode } from 'jwt-decode';\nimport { createContext, type PropsWithChildren, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { createStore, type StoreApi, useStore } from 'zustand';\nimport { generateMutations, generateQueries } from '../api/queries';\nimport Loading from '../components/loading/loading';\nimport { useToken } from '../hooks/useToken';\nimport type { MinhaContaProps, MinhaContaSlotProps } from '../screens/minhaConta/minhaConta.types';\nimport { useAppStore } from '../store/app/useAppStore';\nimport { createMinhaContaStore } from '../store/minhaConta/createMinhaContaStore';\nimport type { MinhaContaStore, MinhaContaStoreState } from '../store/minhaConta/minhaConta.types';\n\nexport type MinhaContaProviderProps = Partial<Omit<MinhaContaStoreState, 'ready' | 'usuario'>> &\n Pick<MinhaContaProps, 'slotProps' | 'api'>;\nconst MinhaContaContext = createContext<{\n storeMinhaConta: StoreApi<MinhaContaStore>;\n storeSlotProps: StoreApi<MinhaContaSlotProps>;\n api: ReturnType<typeof generateQueries> & ReturnType<typeof generateMutations>;\n} | null>(null);\n\nconst getUsuario = (token: string) => {\n try {\n return jwtDecode<{ email: string }>(token);\n } catch (_) {\n return undefined;\n }\n};\n\nexport function MinhaContaProvider(props: PropsWithChildren<MinhaContaProviderProps>) {\n const loading = useAppStore((state) => state.loading);\n const token = useToken(props.api);\n const queryClient = useQueryClient();\n\n /**\n * Declara os stores, em states, assim, quando o componente é desmontado, o store deixa de existir, pois ele é local, e não global\n *\n * Caso queira estudar um pouco sobre:\n * @link https://tkdodo.eu/blog/zustand-and-react-context\n */\n const [storeSlotProps] = useState(() => createStore<MinhaContaSlotProps>(() => props.slotProps ?? {}));\n const [storeMinhaConta] = useState(() => createMinhaContaStore({ ...props, usuario: getUsuario(token) }));\n const [api] = useState(() => {\n return {\n ...generateQueries(props.api),\n ...generateMutations(props.api),\n } as const;\n });\n const clearQueriesCacheOnTokenChange = useCallback(() => {\n storeMinhaConta.setState({ usuario: getUsuario(props.api.token) });\n queryClient.resetQueries();\n }, [props.api.token, queryClient.resetQueries, storeMinhaConta.setState]);\n\n useEffect(() => {\n props.api.subscriber(clearQueriesCacheOnTokenChange);\n }, [props.api.subscriber, clearQueriesCacheOnTokenChange]);\n\n const contextValues = useMemo(\n () => ({\n storeMinhaConta,\n storeSlotProps,\n api,\n }),\n [api, storeMinhaConta, storeSlotProps],\n );\n\n return (\n <MinhaContaContext.Provider value={contextValues}>\n {props.children}\n <Loading show={loading} />\n </MinhaContaContext.Provider>\n );\n}\n\n/**\n * possuí hooks separados para melhor performance em renders\n * Cada hook acessa uma store local do context\n */\nexport function useMinhaContaStore<T>(selector: (p: MinhaContaStore) => T) {\n const context = useContext(MinhaContaContext);\n\n if (context === null) {\n throw new Error('useMinhaContaStore deve ser utilizado dentro de um MinhaContaProvider');\n }\n\n return useStore(context.storeMinhaConta, selector);\n}\n\nexport function useSlotPropsStore<T>(selector: (p: MinhaContaSlotProps) => T) {\n const context = useContext(MinhaContaContext);\n\n if (context === null) {\n throw new Error('useSlotProps deve ser utilizado dentro de um MinhaContaProvider');\n }\n return useStore(context.storeSlotProps, selector);\n}\n\nexport function useApi() {\n const ctx = useContext(MinhaContaContext);\n\n if (ctx === null) {\n throw new Error('useApi deve ser utilizado dentro de um MinhaContaProvider');\n }\n return ctx.api;\n}\n","import { Button, type ButtonProps } from '@mui/material';\n\nexport function ButtonPlanos(props: ButtonProps) {\n return <Button {...props}>Ver planos</Button>;\n}\n\nexport function ButtonLojaRecursos(props: ButtonProps) {\n return <Button {...props}>Loja de recursos</Button>;\n}\n","import { Typography } from '@mui/material';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { colorPalette } from '@s_mart/tokens';\nimport type { IMeuPlanoRecurso, MeuPlanoRecursosResponse } from '../../../helpers/contrateApi/meusDadosApi.types';\n\ntype ItemRecursoProps = { recurso: IMeuPlanoRecurso };\nexport function DetalhesItemRecurso({ recurso }: ItemRecursoProps) {\n return (\n <div key={recurso.codigoRecurso} style={{ display: 'flex', justifyContent: 'space-between', marginTop: '0.2rem' }}>\n <Typography variant='bodySM' color={colorPalette.neutral[100]}>\n {recurso.nomeRecurso}\n </Typography>\n <Typography variant='titleXS' color={colorPalette.neutral[100]}>\n {valorMask.format(recurso.valorRecurso ?? 0)}\n </Typography>\n </div>\n );\n}\n\ntype DetalhesItemPlanoProps = { meuPlano?: MeuPlanoRecursosResponse };\nexport function DetalhesItemPlano({ meuPlano }: DetalhesItemPlanoProps) {\n return (\n <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '0.2rem' }}>\n <Typography variant='bodySM' color={colorPalette.neutral[100]}>\n {meuPlano?.nomePlano}\n </Typography>\n <Typography variant='titleXS' color={colorPalette.neutral[100]}>\n {valorMask.format(meuPlano?.valor ?? 0)}\n </Typography>\n </div>\n );\n}\n","import { ButtonLojaRecursos, ButtonPlanos } from './components/buttonPlanos';\nimport { DetalhesItemPlano, DetalhesItemRecurso } from './components/detalhes';\nimport type { MeuPlanoInfoSlots } from './meuPlanoInfo.types';\n\nexport const DEFAULT_SLOTS: MeuPlanoInfoSlots = {\n DetalhesItemRecurso,\n DetalhesItemPlano,\n ButtonPlanos,\n ButtonLojaRecursos,\n};\n","import { useMediaQuery } from '@mui/system';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useApi } from '../../context/minhaContaProvider';\nimport { DEFAULT_SLOTS } from './meuPlanoInfo.static';\nimport type { MeuPlanoInfoProps } from './meuPlanoInfo.types';\n\nexport function useMeuPlanoInfo(props: MeuPlanoInfoProps) {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const cobrancasQuery = useQuery({\n ...api.listarCobrancas(),\n select(data) {\n return data.data.data.some((i) => i.situacao === 'EMITIDO');\n },\n });\n\n const slots = useMemo(() => ({ ...DEFAULT_SLOTS, ...props.slots }), [props.slots]);\n\n const meuPlano = meuPlanoQuery.data?.data.data;\n const cobrancaEmitida = Boolean(cobrancasQuery.data);\n\n const maxWidth400 = useMediaQuery('(max-width: 400px)');\n\n const valorTotalPlano = useMemo(() => {\n const valorPlano = meuPlano?.valor ?? 0;\n const valorRecursos =\n meuPlano?.recursos\n ?.filter((recurso) => recurso.recursoContratado)\n .reduce((total, curr) => total + curr.valorRecurso, 0) ?? 0;\n\n return valorPlano + valorRecursos;\n }, [meuPlano?.valor, meuPlano?.recursos]);\n\n const recursosContratados = meuPlano?.recursos\n ?.filter((recurso) => recurso.recursoContratado)\n .sort((a, b) => a.valorRecurso - b.valorRecurso);\n\n return {\n meuPlanoQuery,\n meuPlano,\n cobrancaEmitida,\n valorTotalPlano,\n recursosContratados,\n slots,\n maxWidth400,\n };\n}\n","import { Card, Grid, Typography } from '@mui/material';\nimport { LIcon } from '@s_mart/core';\nimport { decimal as decimalMask } from '@s_mart/masks';\nimport { lineShoppingCard, lineStar } from '@s_mart/solid-icons';\nimport getPeriodicidadeLabel from '../../utils/getPeriodicidadeLabel';\nimport { MeuPlanoInfoSkeleton } from './components/skeleton';\nimport type { MeuPlanoInfoProps } from './meuPlanoInfo.types';\nimport { useMeuPlanoInfo } from './useMeuPlanoInfo';\n\nexport function MeuPlanoInfo(props: MeuPlanoInfoProps) {\n const { cobrancaEmitida, maxWidth400, meuPlanoQuery, meuPlano, recursosContratados, slots, valorTotalPlano } =\n useMeuPlanoInfo(props);\n\n if (meuPlanoQuery.isFetching) {\n return <MeuPlanoInfoSkeleton />;\n }\n\n return (\n <>\n <Card elevation={2} sx={{ padding: '1rem' }}>\n <Grid container>\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleSM'>{meuPlano?.recursos ? 'Valor Total' : 'Valor do plano'}</Typography>\n </Grid>\n\n <Grid size={12} sx={{ display: 'flex', justifyContent: 'center', alignItems: 'end' }}>\n <Typography variant='titleXXS' sx={{\n alignSelf: 'center'\n }}>\n R$\n </Typography>\n <Typography variant='titleXL' style={{ fontSize: '3rem' }}>\n {decimalMask.format(valorTotalPlano)}\n </Typography>\n <Typography variant='titleMD' sx={{\n marginBottom: '0.3rem'\n }}>\n /{getPeriodicidadeLabel(meuPlano?.periodicidade ?? null)}\n </Typography>\n </Grid>\n\n <Grid size={12} sx={{\n marginTop: '2rem'\n }}>\n <slots.DetalhesItemPlano meuPlano={meuPlano} />\n\n {recursosContratados?.map((recurso) => (\n <slots.DetalhesItemRecurso recurso={recurso} key={recurso.codigoRecurso} />\n ))}\n </Grid>\n\n <Grid\n size={12}\n sx={{\n display: 'flex',\n flexDirection: maxWidth400 ? 'column' : 'row',\n justifyContent: 'space-between',\n gap: '0.5rem',\n marginTop: '2rem',\n }}\n >\n {props.exibirPlanos && (\n <slots.ButtonPlanos\n variant={cobrancaEmitida ? 'neutral' : 'contained'}\n startIcon={<LIcon icon={lineStar} removeMargin />}\n fullWidth={maxWidth400 || !props.exibirLojaRecursos}\n onClick={props.onClickButtonPlanos}\n />\n )}\n {props.exibirLojaRecursos && (\n <slots.ButtonLojaRecursos\n variant={cobrancaEmitida ? 'neutral' : 'outlined'}\n disabled={!meuPlano?.recursos}\n startIcon={<LIcon icon={lineShoppingCard} removeMargin />}\n fullWidth={maxWidth400 || !props.exibirPlanos}\n onClick={props.onClickButtonLojaRecursos}\n />\n )}\n </Grid>\n </Grid>\n </Card>\n </>\n );\n}\n","const parseError = (error: any) => {\n let err: string[] = [];\n\n if (typeof error !== 'object') return err;\n\n if (Array.isArray(error) && typeof error[0] === 'string') err = error;\n else if (Array.isArray(error.errors)) err = error.errors;\n else if (typeof error.errors === 'string') err = [error.errors];\n else if (typeof error.error === 'string') err = [error.error];\n else if (typeof error.erro === 'string') err = [error.erro];\n else if (error.erro?.mensagem) err = [error.erro.mensagem];\n else if (typeof error.message === 'string') err = [error.message];\n else if (typeof error.mensagem === 'string') err = [error.mensagem];\n else if (typeof error.authErrors?.[0] === 'string') err = error.authErrors;\n\n return err;\n};\n\nexport default parseError;\n","import { useContext, createContext } from 'react';\nimport type { NotificationContextValues, NotificationProviderProps } from './notificationProvider.types';\nimport parseError from '../utils/parseError';\n\nconst NotificationContext = createContext<NotificationContextValues | null>(null);\n\nexport const NotificationProvider = ({ onNotification: setNotification, children }: NotificationProviderProps) => {\n const handleErrors = (error: unknown) => {\n const parsedError = parseError(error);\n console.error(error);\n setNotification({\n variant: 'error',\n title: parsedError[0],\n });\n };\n\n return (\n <NotificationContext.Provider\n value={{\n setNotification,\n handleErrors,\n }}\n >\n {children}\n </NotificationContext.Provider>\n );\n};\n\nexport const useNotificationContext = () => {\n const context = useContext(NotificationContext);\n\n if (context === null) {\n throw new Error('Hook `useMinhaContaContext` must be used inside a MinhaContaProvider');\n }\n\n return context;\n};\n","import { useState } from 'react';\n\n// Usado para fazer a transição ao abrir e fechar a dialog sem precisar passar o open no componente e não deixar o componente renderizado quando fechado\nexport const useDialog = (onClose: () => void) => {\n const [open, setOpen] = useState(true);\n\n const onCloseDialog = () => {\n setOpen(false);\n\n setTimeout(() => onClose(), 100);\n };\n\n return { open, onCloseDialog };\n};\n","const openWhatsapp = (telefone: string) => {\n const api = `https://api.whatsapp.com/send?phone=${telefone}`;\n\n window.open(api, '_blank', 'noopener noreferrer');\n};\n\nexport default openWhatsapp;\n","import { Grid, type GridProps, styled } from '@mui/material';\nimport type { FC } from 'react';\n\n// FC foi uma Tentativa de resolver erro de tipagem quando o vite carrega a modal de ver planos\nexport const SListTitleWrapper: FC<GridProps> = styled(Grid)`\n display: flex;\n justify-content: end;\n margin-bottom: 1.5rem;\n margin-right: 0.5rem;\n`;\n\n// FC foi uma Tentativa de resolver erro de tipagem quando o vite carrega a modal de ver planos\nexport const SListWrapper: FC<GridProps> = styled(Grid)`\n @media (min-height: 800px) {\n max-height: 50vh;\n overflow-y: auto;\n }\n\n @media (max-width: 960px) {\n max-height: fit-content;\n }\n`;\n// FC foi uma Tentativa de resolver erro de tipagem quando o vite carrega a modal de ver planos\nexport const SListItem: FC<GridProps> = styled(Grid)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid #eeeeee;\n border-radius: 8px;\n padding: 1rem 0 1rem 1rem;\n margin-bottom: 1rem;\n\n @media ((min-height: 800px) or (max-width: 960px)) {\n margin-right: 0.5rem;\n }\n`;\n","import { Switch } from '@s_mart/form';\nimport { valor as valorMask } from '@s_mart/masks';\n\nimport { Grid, Typography } from '@mui/material';\nimport { useFormContext } from 'react-hook-form';\n\nimport type { PlanosDialogFormValues } from '../../planosDialog.types';\nimport { SListItem, SListTitleWrapper, SListWrapper } from './listaRecursos.styles';\n\nexport function ListaRecursos() {\n const { getValues } = useFormContext<PlanosDialogFormValues>();\n\n const planoSelecionadoRecursos = getValues('planoSelecionado.recursos');\n\n const _recursosDisponiveis = planoSelecionadoRecursos?.filter(\n (recurso) => !!recurso.valorRecurso,\n );\n\n if (!_recursosDisponiveis?.length) return null;\n\n return (\n <Grid container>\n <SListTitleWrapper size={12}>\n <Typography variant='titleSM'>Confira os recursos em seu novo plano</Typography>\n </SListTitleWrapper>\n\n <SListWrapper size={12}>\n {_recursosDisponiveis.map((recurso) => (\n <SListItem size={12} key={recurso.codigoRecurso}>\n <Typography variant='titleXS'>\n {recurso.nomeRecurso} ({valorMask.format(recurso.valorRecurso)})\n </Typography>\n\n <Switch\n name={`recursosSelecionados.${recurso.slugRecurso}`}\n label={<Typography variant='titleXXS'>Adicionar</Typography>}\n />\n </SListItem>\n ))}\n </SListWrapper>\n </Grid>\n );\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { useCallback, useMemo } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useApi, useMinhaContaStore } from '../../../../context/minhaContaProvider';\nimport type { IPlanoRecurso } from '../../../../helpers/contrateApi/meusDadosApi.types';\nimport type { PlanosDialogFormValues } from '../../planosDialog.types';\n\nconst useConfirmacaoDialog = () => {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n\n const valorPlanoAtual = meuPlano?.valor;\n const tipoCobrancaPlanoAtual = meuPlano?.tipoCobranca;\n const periodicidadePlanoAtual = meuPlano?.periodicidade;\n const nomePlanoPlanoAtual = meuPlano?.nomePlano;\n\n const getValorTotalPlano = useCallback(() => {\n const valorPlano = meuPlano?.valor ?? 0;\n const valorRecursos =\n meuPlano?.recursos\n ?.filter((recurso) => recurso.recursoContratado)\n .reduce((total, curr) => total + curr.valorRecurso, 0) ?? 0;\n\n return valorPlano + valorRecursos;\n }, [meuPlano?.recursos?.filter, meuPlano?.valor]);\n\n const imagensAlterarPlano = useMinhaContaStore((state) => state.planosDialog.imagensAlterarPlano);\n\n const { getValues } = useFormContext<PlanosDialogFormValues>();\n const planoSelecionado = getValues('planoSelecionado');\n const recursosSelecionados = getValues('recursosSelecionados');\n\n const valorTotal = useMemo(() => {\n const recursos: IPlanoRecurso[] = [];\n\n if (planoSelecionado?.recursos && recursosSelecionados) {\n Object.entries(recursosSelecionados).forEach(([key, value]) => {\n if (value) {\n const _recurso = planoSelecionado.recursos.find((it) => it.slugRecurso === key);\n\n if (_recurso) recursos.push(_recurso);\n }\n });\n }\n\n const valorInicial = planoSelecionado?.valorPeriodicoPromocional || planoSelecionado?.valorPeriodico || 0;\n\n const valor = recursos.reduce((total, curr) => total + curr.valorRecurso, valorInicial);\n\n return valor;\n }, [planoSelecionado, recursosSelecionados]);\n\n const dynamicText = useMemo(() => {\n if (planoSelecionado?.periodicidade !== periodicidadePlanoAtual) {\n return {\n title: 'Contratar',\n buttonLabel: 'Confirmar contratação de plano',\n img: imagensAlterarPlano?.contratar,\n };\n }\n\n if (valorTotal > getValorTotalPlano()) {\n return {\n title: 'Melhorar',\n buttonLabel: 'Confirmar alteração de plano',\n img: imagensAlterarPlano?.melhorar,\n };\n } else {\n return {\n title: 'Diminuir',\n buttonLabel: 'Confirmar alteração de plano',\n img: imagensAlterarPlano?.diminuir,\n };\n }\n }, [valorTotal, imagensAlterarPlano, getValorTotalPlano, planoSelecionado, periodicidadePlanoAtual]);\n\n const mudouTipoCobranca = useMemo(() => {\n const valorPlanoSelecionado = planoSelecionado?.valorPeriodicoPromocional || planoSelecionado?.valorPeriodico;\n\n if (\n valorPlanoAtual &&\n valorPlanoSelecionado &&\n tipoCobrancaPlanoAtual &&\n planoSelecionado.tipoDeCobranca &&\n tipoCobrancaPlanoAtual !== planoSelecionado.tipoDeCobranca\n ) {\n return {\n de: tipoCobrancaPlanoAtual === 2 ? 'pós-pago' : 'pré-pago',\n para: planoSelecionado.tipoDeCobranca === 2 ? 'pós-pago' : 'pré-pago',\n };\n } else {\n return null;\n }\n }, [valorPlanoAtual, tipoCobrancaPlanoAtual, planoSelecionado]);\n\n return { valorTotal, mudouTipoCobranca, dynamicText, nomePlanoPlanoAtual, planoSelecionado };\n};\n\nexport default useConfirmacaoDialog;\n","import { Dialog } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\n\nimport { Button, Grid, Typography } from '@mui/material';\n\nimport { useDialog } from '../../../../hooks/useDialog';\nimport getPeriodicidadeLabel from '../../../../utils/getPeriodicidadeLabel';\nimport useConfirmacaoDialog from './useConfirmacaoDialog';\n\ninterface ConfirmacaoDialogProps {\n onClose: () => void;\n}\n\nexport function ConfirmacaoDialog({ onClose }: ConfirmacaoDialogProps) {\n const { mudouTipoCobranca, dynamicText, valorTotal, nomePlanoPlanoAtual, planoSelecionado } =\n useConfirmacaoDialog();\n const { open, onCloseDialog } = useDialog(onClose);\n\n return (\n <Dialog open={open} onClose={onCloseDialog} maxWidth='xs' fullWidth closeIcon disablePortal>\n <Dialog.Header>{dynamicText.title} plano</Dialog.Header>\n\n <Dialog.Content>\n <Grid container spacing={2}>\n <Grid size={12} sx={{ display: 'flex' }}>\n <Typography variant='bodySM'>\n {mudouTipoCobranca ? (\n <>\n Você está alterando seu plano <strong>{nomePlanoPlanoAtual}</strong> para uma nova\n modalidade:{' '}\n <strong style={{ textTransform: 'capitalize' }}>{mudouTipoCobranca.para}</strong>\n </>\n ) : (\n <>\n Você está alterando seu plano para <strong>{planoSelecionado?.nome}</strong>. O\n boleto será enviado por email em até 2 dias úteis.\n </>\n )}\n <br />\n <br />\n {mudouTipoCobranca && (\n <>\n A forma de pagamento será alterada de {mudouTipoCobranca.de} para{' '}\n {mudouTipoCobranca.para}. O <strong>boleto será enviado por email</strong> em até\n 2 dias úteis, com data de vencimento de até 5 dias.\n <br />\n </>\n )}\n Ao confirmar sua nova escolha, sua fatura será alterada para{' '}\n <strong>\n {valorMask.format(valorTotal)}{' '}\n {getPeriodicidadeLabel(planoSelecionado?.periodicidade ?? 0, { modelo: 'mensais' })}\n </strong>\n .\n </Typography>\n </Grid>\n\n <Grid\n size={12}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {!!dynamicText.img && <img src={dynamicText.img} alt={dynamicText.title} />}\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button variant='neutral' onClick={onCloseDialog}>\n Cancelar\n </Button>\n\n <Button type='submit' onClick={onCloseDialog}>\n {dynamicText.buttonLabel}\n </Button>\n </Dialog.Footer>\n </Dialog>\n );\n}\n","import { styled } from '@mui/material';\nimport { Grid } from '@mui/material';\n\nexport const SContainer = styled(Grid)`\n width: 90%;\n border-radius: 16px;\n padding: 1.5rem;\n margin: 0.5rem 0;\n box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.12);\n\n @media ((min-width: 960px) and (max-height: 800px)) {\n position: sticky;\n top: 0;\n }\n\n @media (max-width: 500px) {\n width: 100%;\n padding: 1rem;\n margin: 0.5rem;\n }\n`;\n\nexport const STitleWrapper = styled(Grid)`\n display: flex;\n justify-content: center;\n margin-bottom: 0.5rem;\n`;\n\nexport const SRecursoListItem = styled('div')`\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.3rem;\n`;\n","import { useFormContext } from 'react-hook-form';\n\nimport type { IPlanoRecurso } from '../../../../helpers/contrateApi/meusDadosApi.types';\nimport type { PlanosDialogFormValues } from '../../planosDialog.types';\n\nconst usePlanoShowcase = () => {\n const { watch, getValues } = useFormContext<PlanosDialogFormValues>();\n\n // biome-ignore lint/style/noNonNullAssertion: É esperado que já esteja selecionado o plano ...\n const planoSelecionado = getValues('planoSelecionado')!;\n const recursosSelecionados = watch('recursosSelecionados');\n\n const getRecursos = () => {\n let recursos: IPlanoRecurso[] = [];\n\n // Recursos inclusos\n if (planoSelecionado.recursos) recursos = planoSelecionado.recursos.filter((it) => !it.valorRecurso);\n\n Object.entries(recursosSelecionados || {}).forEach(([key, value]) => {\n if (value) {\n const _recurso = planoSelecionado.recursos?.find((it) => it.slugRecurso === key);\n\n if (_recurso) recursos.push(_recurso);\n }\n });\n\n return recursos;\n };\n\n const getValorTotal = (somenteRecursos?: boolean) => {\n const _recursos = getRecursos();\n const valorInicial = somenteRecursos\n ? 0\n : planoSelecionado.valorPeriodicoPromocional || planoSelecionado.valorPeriodico;\n\n const valor = _recursos.reduce((total, curr) => total + curr.valorRecurso, valorInicial);\n\n return valor;\n };\n\n return { getValorTotal, getRecursos, planoSelecionado };\n};\n\nexport default usePlanoShowcase;\n","import { useState } from 'react';\n\nimport { valor as valorMask } from '@s_mart/masks';\n\nimport { Button, Grid, Typography } from '@mui/material';\n\nimport getPeriodicidadeLabel from '../../../../utils/getPeriodicidadeLabel';\nimport { ConfirmacaoDialog } from '../confirmacaoDialog/confirmacaoDialog';\nimport { SContainer, SRecursoListItem, STitleWrapper } from './planoShowcase.styles';\nimport usePlanoShowcase from './usePlanoShowcase';\n\nexport function PlanoShowcase() {\n const [openedConfirmacao, setOpenedConfirmacao] = useState(false);\n const { planoSelecionado, getRecursos, getValorTotal } = usePlanoShowcase();\n\n return (\n <>\n <SContainer container>\n <STitleWrapper size={12} style={{ marginBottom: '1.5rem' }}>\n <Typography variant='titleMD' align='center'>\n {planoSelecionado.nome}\n </Typography>\n </STitleWrapper>\n\n <STitleWrapper size={12}>\n <Typography variant='titleSM'>Valor do plano</Typography>\n </STitleWrapper>\n\n <STitleWrapper size={12}>\n <Typography variant='bodyLG' style={{ alignSelf: 'center' }}>\n R$\n </Typography>\n <Typography variant='titleXXL'>{Number(getValorTotal().toFixed(2))}</Typography>\n <Typography variant='bodyLG' style={{ alignSelf: 'end' }}>\n /{getPeriodicidadeLabel(planoSelecionado.periodicidade)}\n </Typography>\n </STitleWrapper>\n\n <Grid size={12} style={{ marginBottom: '1rem' }}>\n <Button size='large' fullWidth onClick={() => setOpenedConfirmacao(true)}>\n Contratar agora\n </Button>\n </Grid>\n\n <Grid size={12}>\n <SRecursoListItem>\n <Typography variant='bodyMD'>{planoSelecionado.nome}</Typography>\n <Typography variant='bodyMD'>\n {valorMask.format(\n planoSelecionado.valorPeriodicoPromocional || planoSelecionado.valorPeriodico,\n )}\n </Typography>\n </SRecursoListItem>\n\n <SRecursoListItem>\n <Typography variant='bodySM'>Subtotal recursos</Typography>\n <Typography variant='bodySM'>{valorMask.format(getValorTotal(true))}</Typography>\n </SRecursoListItem>\n\n {getRecursos().map((rec) => (\n <SRecursoListItem key={rec.codigoRecurso}>\n <Typography variant='bodySM'>{rec.nomeRecurso}</Typography>\n <Typography variant='bodySM'>{valorMask.format(rec.valorRecurso)}</Typography>\n </SRecursoListItem>\n ))}\n </Grid>\n </SContainer>\n\n {openedConfirmacao && <ConfirmacaoDialog onClose={() => setOpenedConfirmacao(false)} />}\n </>\n );\n}\n","import { Grid } from '@mui/material';\nimport { ListaRecursos } from './listaRecursos/listaRecursos';\nimport { PlanoShowcase } from './planoShowcase/planoShowcase';\n\nexport function ContratarRecursos() {\n return (\n <Grid container spacing={2}>\n <Grid size={{ xs: 12, md: 7 }}>\n <ListaRecursos />\n </Grid>\n\n <Grid\n size={{\n xs: 12,\n md: 5,\n }}\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'start',\n }}\n >\n <PlanoShowcase />\n </Grid>\n </Grid>\n );\n}\n","import { Grid, Typography } from '@mui/material';\nimport { useMinhaContaStore } from '../../../context/minhaContaProvider';\n\nexport function EmptyState() {\n const emptyStateImg = useMinhaContaStore((state) => state.planosDialog.emptyStateImg);\n\n return (\n <Grid container spacing={2} sx={{ padding: '1rem 0', direction: 'column', alignItems: 'center' }}>\n {!!emptyStateImg && (\n <Grid size={12}>\n <img src={emptyStateImg} alt={'emptyStateImg'} />\n </Grid>\n )}\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleMD'>Você precisa de um plano especial</Typography>\n </Grid>\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='bodyMD'>Para trocar de plano solicite ajuda da nossa equipe no botão abaixo.</Typography>\n </Grid>\n </Grid>\n );\n}\n","import { styled } from '@mui/material';\n\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface SChevronProps {\n side: 'right' | 'left';\n}\n\nexport const SChevron = styled('div')<SChevronProps>`\n display: flex;\n align-items: center;\n border-radius: 4px;\n cursor: pointer;\n\n :hover {\n background-color: ${colorPalette.neutral[30]};\n }\n\n @media (max-width: 450px) {\n position: absolute;\n top: 47%;\n z-index: 100;\n background-color: #fff;\n border-radius: 50%;\n\n ${({ side }) => `${side}: 0;`}\n }\n`;\n","import { styled } from '@mui/material';\n\nimport { colorPalette } from '@s_mart/tokens';\n\nexport const SPlanoContainer = styled('div')`\n display: flex;\n min-width: calc(100% / 3);\n max-width: calc(100% / 3); // Precisa ter o min e max, por algum krl o width não funciona\n\n @media (max-width: 900px) {\n min-width: calc(100% / 2);\n max-width: calc(100% / 2);\n }\n\n @media (max-width: 700px) {\n min-width: 100%;\n max-width: 100%;\n }\n`;\n\ninterface SPlanoCardProps {\n destaque?: boolean;\n disabled?: boolean;\n}\n\nexport const SPlanoCard = styled('div')<SPlanoCardProps>`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n padding: 2rem 1.5rem 1.5rem;\n margin: 0.8rem;\n border: ${({ destaque, theme }) => (destaque ? `2px solid ${theme.palette.primary.main}` : undefined)};\n background-color: ${({ disabled }) => (disabled ? colorPalette.neutral[30] : undefined)};\n opacity: ${({ disabled }) => (disabled ? 0.6 : undefined)};\n\n @media (max-width: 1050px) {\n margin: 0.5rem;\n }\n\n @media (max-width: 400px) {\n padding: 1rem;\n }\n`;\n\nexport const SPlanoCardHeader = styled('div')`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n min-height: 7rem;\n`;\n","import { LIcon } from '@s_mart/core';\nimport { lineCheckCircle, lineWhatsApp } from '@s_mart/regular-icons';\nimport { lineStar } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, Tooltip, type TooltipProps, Typography } from '@mui/material';\n\nimport { useMinhaContaStore } from '../../../../context/minhaContaProvider';\nimport getPeriodicidadeLabel from '../../../../utils/getPeriodicidadeLabel';\nimport openWhatsapp from '../../../../utils/openWhatsapp';\nimport type { IPlano } from '../../planosDialog.types';\nimport { SPlanoCard, SPlanoCardHeader, SPlanoContainer } from './plano.styles';\n\ninterface PlanoProps {\n plano: IPlano;\n id: string;\n reduceFont: boolean;\n periodicidadePlanoAtual: number;\n\n onContratar: (plano: IPlano) => void;\n}\n\nexport function Plano({ plano, id, reduceFont, onContratar, periodicidadePlanoAtual }: PlanoProps) {\n const esconderValorPlanos = useMinhaContaStore((state) => state.planosDialog.esconderValorPlanos);\n const habilitarPlanoAtual = useMinhaContaStore((state) => state.planosDialog.habilitarPlanoAtual);\n const telefoneCS = useMinhaContaStore((state) => state.telefoneCS);\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n\n const desabilitarPlanoAtual = plano.planoAtual && !habilitarPlanoAtual;\n\n const getButtonLabel = () => {\n if (desabilitarPlanoAtual) return 'Seu plano atual';\n\n if (esconderValorPlanos) return 'Quero saber mais';\n\n if (habilitarPlanoAtual && plano.planoAtual) return 'Contratar plano';\n\n if (plano.periodicidade !== periodicidadePlanoAtual) return 'Contratar plano';\n\n if (plano.valorMensalMenorQueAtual) {\n return 'Diminuir plano';\n } else {\n return 'Aumentar plano';\n }\n };\n\n return (\n <SPlanoContainer id={id}>\n <TooltipOpcional\n title={\n plano.disabled30Dias ? (\n <Typography variant='bodyXS'>\n A troca para um plano de valor <br />\n menor, só é possível após 30 dias <br />\n de uso do seu plano atual.\n </Typography>\n ) : (\n ''\n )\n }\n placement='right'\n >\n <SPlanoCard\n destaque={!!plano.destaque}\n disabled={desabilitarPlanoAtual || plano.disabled || plano.disabled30Dias}\n >\n {!!plano.destaque && (\n <LIcon\n icon={lineStar}\n color={colorPalette.yellow[300]}\n style={{ position: 'absolute', top: '5px', right: '5px' }}\n />\n )}\n\n <SPlanoCardHeader>\n <div style={{ textAlign: 'center' }}>\n <Typography variant={reduceFont ? 'titleMS' : 'titleMD'}>{plano.nome}</Typography>\n </div>\n\n {!!plano.fraseDeEfeito && (\n <div>\n <Typography variant='bodySM' color={colorPalette.neutral[100]}>\n {plano.fraseDeEfeito}\n </Typography>\n </div>\n )}\n\n {!esconderValorPlanos && (\n <>\n {!!plano.valorPeriodicoPromocional && (\n <div>\n <Typography\n variant='bodySM'\n color={colorPalette.red[300]}\n style={{ textDecorationLine: 'line-through', marginRight: '2rem' }}\n >\n R$ {plano.valorPeriodico}\n </Typography>\n </div>\n )}\n\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'end' }}>\n <Typography variant='titleXXS' sx={{\n alignSelf: 'center'\n }}>\n R$\n </Typography>\n <Typography\n variant={reduceFont ? 'titleLG' : 'titleXL'}\n style={{ fontSize: '3rem' }}\n >\n {plano.valorPeriodicoPromocional || plano.valorPeriodico}\n </Typography>\n <Typography variant={reduceFont ? 'titleMS' : 'titleMD'} sx={{\n marginBottom: '0.3rem'\n }}>\n /{getPeriodicidadeLabel(plano.periodicidade)}\n </Typography>\n </div>\n </>\n )}\n </SPlanoCardHeader>\n\n <Button\n fullWidth\n variant={desabilitarPlanoAtual ? 'neutral' : 'contained'}\n disabled={desabilitarPlanoAtual || plano.disabled || plano.disabled30Dias}\n startIcon={\n (desabilitarPlanoAtual || esconderValorPlanos) && (\n <LIcon icon={desabilitarPlanoAtual ? lineCheckCircle : lineWhatsApp} size='25px' />\n )\n }\n onClick={() => {\n if (esconderValorPlanos) {\n openWhatsapp(telefoneCS || telefoneSuporte);\n } else {\n onContratar(plano);\n }\n }}\n style={{ margin: '1.5rem 0' }}\n >\n {getButtonLabel()}\n </Button>\n\n <div style={{ paddingLeft: '1rem' }}>\n <Typography variant='bodySM'>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n dangerouslySetInnerHTML={{ __html: plano.descricao }}\n />\n </Typography>\n </div>\n </SPlanoCard>\n </TooltipOpcional>\n </SPlanoContainer>\n );\n}\n\nfunction TooltipOpcional(props: TooltipProps) {\n if (props.title) return <Tooltip {...props} />;\n\n return <>{props.children}</>;\n}\n","import { useMediaQuery } from '@mui/material';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport { useCallback, useMemo } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useApi, useMinhaContaStore } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { IPlanoRaw, Planos } from '../../../helpers/contrateApi/contrateApi.types';\nimport { useAppStore } from '../../../store/app/useAppStore';\nimport type { IPlano, PlanosDialogFormValues } from '../planosDialog.types';\nimport type { ListagemPlanosProps } from './listagemPlanos.types';\n\nconst useListagemPlanos = ({ planos }: ListagemPlanosProps) => {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const queryClient = useQueryClient();\n\n const codigoPlanoAtual = meuPlano?.codigoPlano;\n const periodicidadePlanoAtual = meuPlano?.periodicidade ?? null;\n const valorPlanoAtual = meuPlano?.valor;\n const dataContratacaoPlanoAtual = meuPlano?.dataContratacao;\n const recursosPlanoAtual = meuPlano?.recursos;\n\n const setLoading = useAppStore((state) => state.setLoading);\n const bloquearDowngrade = useMinhaContaStore((state) => state.planosDialog.bloquearDowngrade);\n const bloquearDowngrade30Dias = useMinhaContaStore((state) => state.planosDialog.bloquearDowngrade30Dias);\n const desabilitarPlanosMenores = useMinhaContaStore((state) => state.planosDialog.desabilitarPlanosMenores);\n const mostrarSomentePlanosDaPeriodicidade = useMinhaContaStore(\n (state) => state.planosDialog.mostrarSomentePlanosDaPeriodicidade,\n );\n const planosDeterminados = useMinhaContaStore(\n (state) => state.planosDialog.mostrarPlanosDeterminados?.codigoPlanoValor,\n );\n\n const { handleErrors } = useNotificationContext();\n\n const { watch, setValue } = useFormContext<PlanosDialogFormValues>();\n const maxWidth900 = useMediaQuery('(max-width: 900px)');\n const maxWidth700 = useMediaQuery('(max-width: 700px)');\n const maxWidth450 = useMediaQuery('(max-width: 450px)');\n const filtroPeriodicidade = watch('filtroPeriodicidade');\n\n const downgradeBloqueado30Dias =\n !!bloquearDowngrade30Dias && dayjs().diff(dayjs(dataContratacaoPlanoAtual), 'days') < 30;\n\n const scrollControl = useMemo(() => {\n const aux = { previous: 0, next: 4 };\n\n if (maxWidth700) aux.next = 2;\n else if (maxWidth900) aux.next = 3;\n\n return aux;\n }, [maxWidth700, maxWidth900]);\n\n // Tem que ser function senão dá erro de initialization\n const getValorMensal = useCallback((valorPlano: number, periodicidade: number | null) => {\n switch (periodicidade) {\n case 1:\n return valorPlano / 3;\n case 2:\n return valorPlano / 6;\n case 3:\n return valorPlano / 12;\n default:\n return valorPlano;\n }\n }, []);\n\n const planosFiltrados = useMemo(() => {\n let filtrados: IPlanoRaw[] = [];\n\n if (!planos) return filtrados as IPlano[];\n\n if (planosDeterminados && !mostrarSomentePlanosDaPeriodicidade) {\n const todosPlanos = [...planos.mensais, ...planos.trimestrais, ...planos.semestrais, ...planos.anuais];\n\n filtrados = todosPlanos.filter((plano) => planosDeterminados.includes(plano.codigoPlanoValor));\n } else if (filtroPeriodicidade) {\n const periodicidades: (keyof Planos)[] = ['mensais', 'trimestrais', 'semestrais', 'anuais'];\n\n const periodicidade = mostrarSomentePlanosDaPeriodicidade || periodicidades[filtroPeriodicidade.value];\n\n filtrados = planos[periodicidade];\n }\n\n filtrados.sort((a, b) => a.valorPeriodico - b.valorPeriodico);\n\n const extended: IPlano[] = filtrados.map((plano) => {\n const valorPlano = plano.valorPeriodicoPromocional || plano.valorPeriodico;\n const valorMensalMenorQueAtual =\n getValorMensal(valorPlano, plano.periodicidade) < getValorMensal(valorPlanoAtual ?? 0, periodicidadePlanoAtual);\n\n return {\n ...plano,\n planoAtual: plano.codigo === codigoPlanoAtual && plano.periodicidade === periodicidadePlanoAtual,\n valorMensalMenorQueAtual,\n disabled: (!!bloquearDowngrade || !!desabilitarPlanosMenores) && valorMensalMenorQueAtual,\n disabled30Dias: downgradeBloqueado30Dias && valorMensalMenorQueAtual,\n };\n });\n\n return extended;\n }, [\n planos,\n bloquearDowngrade,\n periodicidadePlanoAtual,\n downgradeBloqueado30Dias,\n getValorMensal,\n valorPlanoAtual,\n desabilitarPlanosMenores,\n mostrarSomentePlanosDaPeriodicidade,\n codigoPlanoAtual,\n filtroPeriodicidade,\n planosDeterminados,\n ]);\n\n const showScrollControllers = useMemo(() => {\n if (maxWidth700) return planosFiltrados.length > 1;\n if (maxWidth900) return planosFiltrados.length > 2;\n\n return planosFiltrados.length > 3;\n }, [maxWidth700, maxWidth900, planosFiltrados]);\n\n const scrollPlanos = (to: 'next' | 'previous') => {\n const planoIndex = scrollControl[to];\n\n if (planoIndex === 0 || planoIndex > planosFiltrados.length) return;\n\n const elem = document.getElementById(`plano-${planoIndex}`);\n\n if (elem) {\n elem.scrollIntoView({ behavior: 'smooth' });\n\n if (to === 'next') {\n scrollControl.next++;\n scrollControl.previous++;\n } else {\n scrollControl.next--;\n scrollControl.previous--;\n }\n }\n };\n\n const handleClickContratarPlano = async (plano: IPlano) => {\n try {\n setLoading(true);\n const resp = await queryClient.ensureQueryData(\n api.buscarPlano({\n params: { periodicidade: plano.periodicidade },\n path: { codigo: plano.codigo },\n }),\n );\n\n if (resp.data.data) {\n const recursosPreSelecionados: Record<string, boolean> = {};\n const recursosIncluidos = resp.data.data.recursos\n ?.filter((it) => !it?.valorRecurso)\n ?.map((it) => it?.slugRecurso);\n const recursosContratados = recursosPlanoAtual?.filter((it) => it.recursoContratado);\n\n recursosContratados?.forEach((it) => {\n const existeNoPlanoSelecionado = resp.data.data.recursos.some((rec) => rec.slugRecurso === it.slugRecurso);\n\n if (existeNoPlanoSelecionado && !recursosIncluidos?.includes(it.slugRecurso)) {\n recursosPreSelecionados[it.slugRecurso] = true;\n }\n });\n\n setValue('recursosSelecionados', recursosPreSelecionados);\n setValue('planoSelecionado', { ...plano, recursos: resp.data.data.recursos });\n }\n\n setLoading(false);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n return {\n planosFiltrados,\n scrollPlanos,\n showScrollControllers,\n maxWidth700,\n maxWidth450,\n handleClickContratarPlano,\n periodicidadePlanoAtual,\n };\n};\n\nexport default useListagemPlanos;\n","import { LIcon } from '@s_mart/core';\nimport { lineChevronLeft, lineChevronRight } from '@s_mart/regular-icons';\n\nimport { SChevron } from './listagemPlanos.styles';\nimport { Plano } from './plano/plano';\nimport useListagemPlanos from './useListagemPlanos';\nimport type { ListagemPlanosProps } from './listagemPlanos.types';\n\nexport function ListagemPlanos(props: ListagemPlanosProps) {\n const {\n planosFiltrados,\n scrollPlanos,\n showScrollControllers,\n maxWidth700,\n maxWidth450,\n handleClickContratarPlano,\n periodicidadePlanoAtual,\n } = useListagemPlanos(props);\n\n return (\n <div style={{ display: 'flex', position: 'relative' }}>\n {showScrollControllers && (\n <SChevron side=\"left\" onClick={() => scrollPlanos('previous')}>\n <LIcon icon={lineChevronLeft} size={maxWidth700 ? '2rem' : '3rem'} />\n </SChevron>\n )}\n\n <div\n style={{\n display: 'flex',\n justifyContent: showScrollControllers ? undefined : 'center',\n overflow: 'hidden',\n flex: 1,\n }}\n >\n {planosFiltrados.map((plano, index) => (\n <Plano\n key={plano.codigoPlanoValor}\n id={`plano-${index + 1}`}\n plano={plano}\n reduceFont={maxWidth450}\n periodicidadePlanoAtual={periodicidadePlanoAtual ?? 0}\n onContratar={handleClickContratarPlano}\n />\n ))}\n </div>\n\n {showScrollControllers && (\n <SChevron side=\"right\" onClick={() => scrollPlanos('next')}>\n <LIcon icon={lineChevronRight} size={maxWidth700 ? '2rem' : '3rem'} />\n </SChevron>\n )}\n </div>\n );\n}\n","import { CircularProgress } from '@mui/material';\n\nexport function Loading() {\n return (\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '20vh' }}>\n <CircularProgress />\n </div>\n );\n}\n","export const periodicidadeOptions = [\n { label: 'Mensais', value: 0 },\n { label: 'Trimestrais', value: 1 },\n { label: 'Semestrais', value: 2 },\n { label: 'Anuais', value: 3 },\n];\n","import { useMutation, useQuery } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useApi, useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../context/notificationProvider';\nimport type { IPlanoRecurso } from '../../helpers/contrateApi/meusDadosApi.types';\nimport { useAppStore } from '../../store/app/useAppStore';\nimport { periodicidadeOptions } from './planosDialog.static';\nimport type { IPlanoWithRecursos, PlanosDialogFormValues, UsePlanosDialogProps } from './planosDialog.types';\n\nconst usePlanosDialog = ({ onClose }: UsePlanosDialogProps) => {\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n const mostrarPlanosDeterminados = useMinhaContaStore((state) => state.planosDialog.mostrarPlanosDeterminados);\n const esconderPeriodicidade = useMinhaContaStore((state) => state.planosDialog.esconderPeriodicidade);\n const onContratarSuccess = useMinhaContaStore((state) => state.planosDialog.onContratarSuccess);\n const { handleErrors, setNotification } = useNotificationContext();\n const setLoading = useAppStore((state) => state.setLoading);\n\n const api = useApi();\n\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const codigoGrupoMeuPlano = meuPlano?.codigoGrupo;\n const periodicidadeMeuPlano = meuPlano?.periodicidade ?? null;\n\n const codigoGrupo = mostrarPlanosDeterminados?.codigoGrupo || codigoGrupoMeuPlano;\n\n const planosEGruposQuery = useQuery({\n // biome-ignore lint/style/noNonNullAssertion: Vai estar definido defindo a validação no campo enabled\n ...api.listarPlanosEGrupos({ params: { grupo: codigoGrupo! } }),\n enabled: meuPlanoQuery.isFetched && Boolean(codigoGrupo),\n select({ data }) {\n if (\n data.data.planos &&\n ![\n ...data.data.planos.mensais,\n ...data.data.planos.trimestrais,\n ...data.data.planos.semestrais,\n ...data.data.planos.anuais,\n ].length\n ) {\n data.data.planos = null;\n }\n\n return data.data;\n },\n });\n const planosEGrupos = planosEGruposQuery.data;\n\n const contratarPlano = useMutation(api.contratarPlano());\n const contratarRecurso = useMutation(api.contratarRecurso());\n\n const isLoading = !meuPlanoQuery.isFetched || !planosEGruposQuery.data;\n\n const initialValues = useMemo(() => {\n const values: Partial<PlanosDialogFormValues> = {};\n\n if (meuPlanoQuery.isFetched && typeof periodicidadeMeuPlano === 'number')\n values.filtroPeriodicidade = periodicidadeOptions[periodicidadeMeuPlano];\n\n return values;\n }, [periodicidadeMeuPlano, meuPlanoQuery.isFetched]);\n\n const filtroPeriodicidadeOptions = useMemo(() => {\n const options: { value: number; label: string }[] = [];\n\n if (planosEGrupos?.planos) {\n if (planosEGrupos.planos.mensais.length) options.push(periodicidadeOptions[0]);\n if (planosEGrupos.planos.trimestrais.length) options.push(periodicidadeOptions[1]);\n if (planosEGrupos.planos.semestrais.length) options.push(periodicidadeOptions[2]);\n if (planosEGrupos.planos.anuais.length) options.push(periodicidadeOptions[3]);\n }\n\n return options;\n }, [planosEGrupos]);\n\n const mostrarPeriodicidade =\n !esconderPeriodicidade && !mostrarPlanosDeterminados?.codigoPlanoValor && filtroPeriodicidadeOptions.length > 1;\n\n const handleContratarPlano = async (values: PlanosDialogFormValues) => {\n try {\n if (!values.planoSelecionado) throw { error: 'Ocorreu um erro inesperado' };\n setLoading(true);\n\n const query = {\n codigoPlano: values.planoSelecionado.codigo,\n codigoPlanoValor: values.planoSelecionado.codigoPlanoValor,\n };\n\n await contratarPlano.mutateAsync(query);\n\n const successCallback = () => {\n // biome-ignore lint/style/noNonNullAssertion: É esperado que tenha um plano Selecionado após a request\n onContratarSuccess?.(meuPlano!, values.planoSelecionado!);\n\n setNotification({\n title: 'Seu plano foi atualizado com sucesso.',\n });\n\n meuPlanoQuery.refetch();\n onClose();\n };\n\n const recursosSelecionados = Object.entries(values.recursosSelecionados || {});\n\n if (recursosSelecionados.length) {\n const recursosContratar: IPlanoRecurso[] = [];\n\n recursosSelecionados.forEach(([key, value]) => {\n if (value) {\n const _recurso = values.planoSelecionado?.recursos?.find((it) => it.slugRecurso === key);\n\n if (_recurso) recursosContratar.push(_recurso);\n }\n });\n\n const recursosComErro = await handleContratarRecursos(recursosContratar);\n\n if (recursosComErro.length) {\n const aux = recursosComErro.map((it) => it.nomeRecurso);\n\n successCallback();\n\n setNotification({\n title: 'Ocorreu um erro ao contratar os seguintes recursos:',\n message: aux.join(' ; '),\n duration: 10000,\n });\n } else {\n successCallback();\n }\n } else {\n successCallback();\n }\n\n setLoading(false);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n const handleContratarRecursos = (recursos: IPlanoRecurso[]) => {\n const recursosComErro: IPlanoRecurso[] = [];\n\n return new Promise<IPlanoRecurso[]>((resolve) => {\n const contrataRecursive = (recursosContratar: IPlanoRecurso[]) => {\n const recursoAux = recursosContratar.shift();\n\n if (!recursoAux) return resolve(recursosComErro);\n\n contratarRecurso\n .mutateAsync(Number(recursoAux.codigoRecurso))\n .catch(() => recursosComErro.push(recursoAux))\n .finally(() => contrataRecursive(recursosContratar));\n };\n\n contrataRecursive([...recursos]);\n });\n };\n\n const getDialogTitle = (planoSelecionado?: IPlanoWithRecursos) => {\n if (planoSelecionado) {\n if (planoSelecionado.periodicidade !== periodicidadeMeuPlano) return 'Contratar plano';\n\n if (planoSelecionado.valorMensalMenorQueAtual) {\n return 'Diminuir plano';\n } else {\n return 'Aumentar plano';\n }\n } else {\n return 'Meus planos';\n }\n };\n\n return {\n telefoneSuporte,\n handleContratarPlano,\n isLoading,\n mostrarPeriodicidade,\n filtroPeriodicidadeOptions,\n initialValues,\n planosEGrupos,\n getDialogTitle,\n };\n};\n\nexport default usePlanosDialog;\n","import { Dialog, LIcon } from '@s_mart/core';\nimport { Form, Select } from '@s_mart/form';\nimport { lineWhatsApp } from '@s_mart/regular-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, Typography } from '@mui/material';\n\nimport { useDialog } from '../../hooks/useDialog';\nimport openWhatsapp from '../../utils/openWhatsapp';\nimport { ContratarRecursos } from './contratarRecursos/contratarRecursos';\nimport { EmptyState } from './emptyState/emptyState';\nimport { ListagemPlanos } from './listagemPlanos/listagemPlanos';\nimport { Loading } from './loading/loading';\nimport type { PlanosDialogProps } from './planosDialog.types';\nimport usePlanosDialog from './usePlanosDialog';\n\nexport function PlanosDialog({ onClose }: Pick<PlanosDialogProps, 'onClose'>) {\n const { open, onCloseDialog } = useDialog(onClose);\n const {\n isLoading,\n mostrarPeriodicidade,\n filtroPeriodicidadeOptions,\n handleContratarPlano,\n telefoneSuporte,\n initialValues,\n planosEGrupos,\n getDialogTitle,\n } = usePlanosDialog({ onClose: onCloseDialog });\n\n const getDialogContent = (planoSelecionado: boolean) => {\n if (isLoading) return <Loading />;\n\n if (!planosEGrupos?.planos) return <EmptyState />;\n\n if (planoSelecionado) return <ContratarRecursos />;\n\n return <ListagemPlanos planos={planosEGrupos.planos} />;\n };\n\n return (\n <Dialog\n open={open}\n onClose={onCloseDialog}\n fullWidth\n maxWidth='xl'\n closeIcon\n disableBackdropClick\n >\n <Form\n onSubmit={handleContratarPlano}\n defaultValues={initialValues}\n style={{ display: 'flex', flexDirection: 'column', overflowY: 'auto' }} // Corrige quebra do layout causada pelo form\n >\n {({ watch, setValue }) => {\n const planoSelecionado = watch('planoSelecionado');\n\n return (\n <>\n <Dialog.Header>\n <div style={{ display: 'flex', flex: 1, justifyContent: 'space-between' }}>\n <Typography variant='titleMD'>{getDialogTitle(planoSelecionado)}</Typography>\n\n {mostrarPeriodicidade && !planoSelecionado && (\n <Select\n name='filtroPeriodicidade'\n options={filtroPeriodicidadeOptions}\n style={{ minWidth: '7rem', marginRight: '0.5rem' }}\n getOptionKey={(opt) => opt.value}\n getOptionLabel={(opt) => opt.label}\n />\n )}\n </div>\n </Dialog.Header>\n\n <Dialog.Content>{getDialogContent(!!planoSelecionado)}</Dialog.Content>\n\n <Dialog.Footer>\n {planoSelecionado ? (\n <Button\n variant='neutral'\n disableRipple\n onClick={() => {\n setValue('planoSelecionado', undefined);\n setValue('recursosSelecionados', undefined);\n }}\n >\n Voltar\n </Button>\n ) : (\n <Button\n variant='outlined'\n color='neutral'\n startIcon={<LIcon icon={lineWhatsApp} size='22px' removeMargin />}\n style={{ color: colorPalette.neutral[100] }}\n onClick={() => openWhatsapp(telefoneSuporte)}\n >\n Preciso de Ajuda\n </Button>\n )}\n </Dialog.Footer>\n </>\n );\n }}\n </Form>\n </Dialog>\n );\n}\n","import { NotificationProvider } from '../../context/notificationProvider';\n\nimport { PlanosDialog as PlanosDialogComp } from './planosDialog';\nimport type { PlanosDialogProps } from './planosDialog.types';\n\nexport function PlanosDialog({ onClose, onNotification }: PlanosDialogProps) {\n return (\n <NotificationProvider onNotification={onNotification}>\n <PlanosDialogComp onClose={onClose} />\n </NotificationProvider>\n );\n}\n","import { Button, Grid, Typography } from '@mui/material';\nimport { Dialog } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { useQuery } from '@tanstack/react-query';\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useDialog } from '../../../hooks/useDialog';\nimport getPeriodicidadeLabel from '../../../utils/getPeriodicidadeLabel';\nimport type { ConfirmacaoAdquirirDialogProps } from './confirmacaoAdquirirDialog.types';\n\nexport function ConfirmacaoAdquirirDialog({ recurso, onClose, onConfirmar }: ConfirmacaoAdquirirDialogProps) {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const periodicidade = meuPlano?.periodicidade ?? null;\n const { open, onCloseDialog } = useDialog(onClose);\n\n const handleConfirmar = async () => {\n await onConfirmar(recurso);\n\n onCloseDialog();\n };\n\n return (\n <Dialog open={open} closeIcon onClose={onCloseDialog}>\n <Dialog.Header>Adquirir novo recurso</Dialog.Header>\n\n <Dialog.Content>\n <Grid container>\n <Grid size={12}>\n <Typography variant='bodySM'>Você está adquirindo um recurso do seu sistema: </Typography>\n <Typography variant='titleXS'>{recurso.nomeRecurso}</Typography>\n </Grid>\n\n <Grid size={12}>\n <Typography variant='bodySM'>\n Informamos que sua {getPeriodicidadeLabel(periodicidade, { modelo: 'mensalidade' })} terá uma adição de{' '}\n {valorMask.format(recurso.valorRecurso)}\n </Typography>\n </Grid>\n\n <br />\n <br />\n\n <Grid size={12}>\n <Typography variant='bodySM'>Deseja confirmar a aquisição?</Typography>\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button variant='neutral' onClick={onCloseDialog}>\n Cancelar\n </Button>\n\n <Button onClick={handleConfirmar}>Confirmar</Button>\n </Dialog.Footer>\n </Dialog>\n );\n}\n","import { Dialog } from '@s_mart/core';\n\nimport { Button, Grid, Typography } from '@mui/material';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useDialog } from '../../../hooks/useDialog';\nimport getPeriodicidadeLabel from '../../../utils/getPeriodicidadeLabel';\nimport type { ConfirmacaoRemoverDialogProps } from './confirmacaoRemoverDialog.types';\n\nexport function ConfirmacaoRemoverDialog({\n recurso,\n onClose,\n onRemover,\n}: ConfirmacaoRemoverDialogProps) {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const periodicidade = meuPlano?.periodicidade ?? null;\n const { open, onCloseDialog } = useDialog(onClose);\n\n const handleRemover = async () => {\n await onRemover(recurso);\n\n onCloseDialog();\n };\n\n return (\n <Dialog open={open} closeIcon onClose={onCloseDialog}>\n <Dialog.Header>Remover recurso</Dialog.Header>\n\n <Dialog.Content>\n <Grid container>\n <Grid size={12}>\n <Typography variant='bodySM'>\n Você está removendo um recurso do seu sistema:{' '}\n </Typography>\n <Typography variant='titleXS'>{recurso.nomeRecurso}</Typography>\n </Grid>\n\n <Grid size={12}>\n <Typography variant='bodySM'>\n Sua {getPeriodicidadeLabel(periodicidade, { modelo: 'mensalidade' })} terá uma\n alteração.\n </Typography>\n </Grid>\n\n <br />\n <br />\n\n <Grid size={12}>\n <Typography variant='bodySM'>Deseja confirmar a remoção?</Typography>\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button color='error' onClick={handleRemover}>\n Remover\n </Button>\n\n <Button variant='neutral' onClick={onCloseDialog}>\n Cancelar\n </Button>\n </Dialog.Footer>\n </Dialog>\n );\n}\n","import { Grid, Typography } from '@mui/material';\nimport { useMinhaContaStore } from '../../../context/minhaContaProvider';\n\nexport function EmptyState() {\n const emptyStateImg = useMinhaContaStore((state) => state.recursosDialog.emptyStateImg);\n\n return (\n <Grid container spacing={2} sx={{ direction: 'column', alignItems: 'center', margin: '2rem 0', width: '100%' }}>\n {!!emptyStateImg && (\n <Grid>\n <img src={emptyStateImg} alt='emptyStateImg' />\n </Grid>\n )}\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleMD'>Novos recursos vêm aí</Typography>\n </Grid>\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='bodyMD'>Você já possui todos os recursos disponíveis no momento.</Typography>\n </Grid>\n </Grid>\n );\n}\n","import { styled } from '@mui/material';\n\nexport const SImg = styled('img')`\n max-width: 520px;\n\n @media only screen and (max-width: 640px) {\n max-width: 400px;\n }\n\n @media only screen and (max-width: 520px) {\n max-width: 300px;\n }\n\n @media only screen and (max-width: 420px) {\n max-width: 260px;\n }\n`;\n","import { Dialog } from '@s_mart/core';\n\nimport { Button, Grid, Typography } from '@mui/material';\n\nimport { useDialog } from '../../../hooks/useDialog';\nimport { SImg } from './gifDialog.styles';\nimport type { GifDialogProps } from './gifDialog.types';\n\nexport function GifDialog({\n recurso,\n onClose,\n onAdquirirRecurso,\n onRemoverRecurso,\n}: GifDialogProps) {\n const { open, onCloseDialog } = useDialog(onClose);\n\n const recursoIncluso = recurso.valorRecurso === 0 && recurso.recursoContratado;\n\n const handleRemover = async () => {\n await onRemoverRecurso(recurso);\n\n onCloseDialog();\n };\n\n const handleAdquirir = async () => {\n await onAdquirirRecurso(recurso);\n\n onCloseDialog();\n };\n\n return (\n <Dialog open={open} closeIcon onClose={onCloseDialog}>\n <Dialog.Header>Este recurso pode ajudar você!</Dialog.Header>\n\n <Dialog.Content>\n <Grid container spacing={2} sx={{ direction: 'column', alignItems: 'center' }}>\n <Grid>\n <Typography variant='titleSM'>{recurso.nomeRecurso}</Typography>\n </Grid>\n\n <Grid>\n <Typography variant='bodySM'>{recurso.descricaoRecurso}</Typography>\n </Grid>\n\n {recurso.gif && (\n <Grid>\n <SImg src={recurso.gif} />\n </Grid>\n )}\n </Grid>\n </Dialog.Content>\n\n {!recursoIncluso && !recurso.dataExclusaoRecurso && (\n <Dialog.Footer>\n {recurso.recursoContratado ? (\n <Button color='error' onClick={handleRemover}>\n Remover recurso\n </Button>\n ) : (\n <Button onClick={handleAdquirir}>Adquirir recurso</Button>\n )}\n </Dialog.Footer>\n )}\n </Dialog>\n );\n}\n","import { css, styled } from '@mui/material';\n\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface SContainerProps {\n recursoContratado: boolean;\n emDestaque: boolean;\n}\n\nexport const SContainer = styled('div')<SContainerProps>`\n display: flex;\n padding: 1rem;\n gap: 1rem;\n min-height: 10rem;\n border: 1px solid ${colorPalette.neutral[50]};\n border-radius: 6px;\n background-color: ${({ recursoContratado }) =>\n recursoContratado ? colorPalette.neutral[30] : colorPalette.neutral[0]};\n transition: 200ms;\n\n ${({ emDestaque, theme }) =>\n emDestaque &&\n css`\n border: 1px solid ${theme.palette.primary.main};\n box-shadow:\n 0px 0px 4px 0px rgba(0, 0, 0, 0.25),\n 0px 0px 1px 0px rgba(0, 0, 0, 0.03);\n `}\n\n :hover {\n background-color: ${({ recursoContratado }) => recursoContratado && colorPalette.neutral[50]};\n border: 1px solid ${({ recursoContratado, theme }) => !recursoContratado && theme?.palette?.primary?.main};\n }\n`;\n\ninterface SImgProps {\n hasGif: boolean;\n}\n\nexport const SImg = styled('img')<SImgProps>`\n height: 3.5rem;\n width: 3.5rem;\n\n cursor: ${({ hasGif }) => (hasGif ? 'pointer' : undefined)};\n`;\n\ninterface SFooterProps {\n emDestaque: boolean;\n}\n\nexport const SFooter = styled('div')<SFooterProps>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 0.5rem;\n\n ${({ emDestaque }) =>\n emDestaque &&\n css`\n justify-content: end;\n gap: 0.5rem;\n `}\n\n @media only screen and (max-width: 700px) {\n flex-direction: column;\n gap: 0.3rem;\n\n & button {\n width: 100%;\n }\n }\n`;\n","import { LIcon } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { lineCheckCircle } from '@s_mart/regular-icons';\nimport { lineStar, lineWhatsappBrands } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, Tooltip, Typography } from '@mui/material';\nimport dayjs from 'dayjs';\n\nimport { useMinhaContaStore } from '../../../context/minhaContaProvider';\nimport openWhatsapp from '../../../utils/openWhatsapp';\nimport { SContainer, SFooter, SImg } from './recurso.styles';\nimport type { RecursoProps } from './recurso.types';\n\nexport function Recurso({ recurso, periodicidade, onClick, onAdquirir, onRemover }: RecursoProps) {\n const telefoneCS = useMinhaContaStore((state) => state.telefoneCS);\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n const esconderValoresRecursos = useMinhaContaStore(\n (state) => state.recursosDialog.esconderValoresRecursos,\n );\n const recursoIncluso = recurso.valorRecurso === 0 && recurso.recursoContratado;\n const acaoSecundariaOnClickRecurso = useMinhaContaStore(\n (state) => state.recursosDialog.acaoSecundariaOnClickRecurso,\n );\n const naoPermitirRemoverRecursos = useMinhaContaStore(\n (state) => state.recursosDialog.naoPermitirRemoverRecursos,\n );\n\n const getFooterButton = () => {\n if (recursoIncluso) return <></>;\n\n if (recurso.recursoContratado) {\n if (recurso.dataExclusaoRecurso) {\n return (\n <Tooltip\n title={\n <Typography variant='bodySM'>\n Recurso disponível até {dayjs(recurso.dataExclusaoRecurso).format('DD/MM/YYYY')}\n </Typography>\n }\n >\n <div style={{ padding: '0.3rem 0' }}>\n <Typography variant='bodySM'>Removido</Typography>\n </div>\n </Tooltip>\n );\n }\n return (\n <Button\n variant='neutral'\n size='small'\n startIcon={\n naoPermitirRemoverRecursos ? (\n <LIcon icon={lineWhatsappBrands} size='22px' removeMargin />\n ) : undefined\n }\n onClick={(e) => {\n e.stopPropagation();\n\n if (naoPermitirRemoverRecursos) {\n openWhatsapp(telefoneCS || telefoneSuporte);\n } else {\n onRemover(recurso);\n }\n }}\n >\n Remover\n </Button>\n );\n }\n return (\n <Button\n variant={recurso.emDestaque ? 'contained' : 'outlined'}\n size='small'\n fullWidth={esconderValoresRecursos}\n startIcon={\n esconderValoresRecursos && <LIcon icon={lineWhatsappBrands} size='22px' removeMargin />\n }\n onClick={(e) => {\n if (esconderValoresRecursos) {\n openWhatsapp(telefoneCS || telefoneSuporte);\n } else {\n e.stopPropagation();\n onAdquirir(recurso);\n }\n\n acaoSecundariaOnClickRecurso?.();\n }}\n >\n {esconderValoresRecursos ? 'Quero saber mais' : 'Adquirir'}\n </Button>\n );\n };\n\n return (\n <SContainer\n recursoContratado={recurso.recursoContratado}\n emDestaque={recurso.emDestaque}\n onClick={() => recurso.gif && onClick(recurso)}\n >\n <div>\n <SImg src={recurso.caminhoImagem} hasGif={!!recurso.gif} />\n </div>\n\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n flex: 1,\n }}\n >\n <div>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.1rem' }}>\n <Typography variant='titleSM'>{recurso.nomeRecurso}</Typography>\n\n {recurso.recursoContratado && (\n <LIcon icon={lineCheckCircle} size='24px' color={colorPalette.green[500]} />\n )}\n {recurso.emDestaque && (\n <LIcon icon={lineStar} size='24px' color={colorPalette.yellow[300]} />\n )}\n </div>\n\n <Typography variant='bodySM'>{recurso.descricaoRecurso}</Typography>\n </div>\n\n <SFooter emDestaque={recurso.emDestaque}>\n {recursoIncluso ? (\n <Typography variant='titleXS' sx={{ padding: '0.3rem 0' }}>\n Recurso incluso\n </Typography>\n ) : (\n !esconderValoresRecursos && (\n <Typography variant='titleXS'>\n {valorMask.format(recurso.valorRecurso)}/{periodicidade}\n </Typography>\n )\n )}\n\n {getFooterButton()}\n </SFooter>\n </div>\n </SContainer>\n );\n}\n","import { useMutation, useQuery } from '@tanstack/react-query';\nimport { useMemo, useState } from 'react';\nimport { useApi, useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../context/notificationProvider';\nimport { useAppStore } from '../../store/app/useAppStore';\nimport getPeriodicidadeLabel from '../../utils/getPeriodicidadeLabel';\nimport type { IRecurso, RecursosFiltrados, RecursosSubDialogs } from './recursosDialog.types';\n\nconst useRecursosDialog = () => {\n const [openedDialog, setOpenedDialog] = useState<RecursosSubDialogs | null>(null);\n const api = useApi();\n\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const contratarRecursoMutation = useMutation(api.contratarRecurso());\n const descontratarRecursoMutation = useMutation(api.descontratarRecurso());\n\n const _recursos = meuPlano?.recursos;\n const periodicidade = meuPlano?.periodicidade ?? null;\n\n const sistemaNome = useMinhaContaStore((state) => state.sistemaNome);\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n const telefoneCS = useMinhaContaStore((state) => state.telefoneCS);\n const recursosGifs = useMinhaContaStore((state) => state.recursosDialog.recursosGifs);\n const recursoEmDestaque = useMinhaContaStore((state) => state.recursosDialog.recursoEmDestaque);\n const onContratarRecurso = useMinhaContaStore((state) => state.recursosDialog.onContratarRecurso);\n const onRemoverRecurso = useMinhaContaStore((state) => state.recursosDialog.onRemoverRecurso);\n const setLoading = useAppStore((state) => state.setLoading);\n const { handleErrors, setNotification } = useNotificationContext();\n\n const periodicidadeLabel = getPeriodicidadeLabel(periodicidade);\n\n const recursos = useMemo(() => {\n const aux: RecursosFiltrados = { contratados: [], naoContratados: [] };\n\n _recursos?.forEach((recurso) => {\n const gif = recursosGifs?.find((gif) => gif.slug === recurso.slugRecurso)?.gif || null;\n\n if (recurso.recursoContratado) {\n aux.contratados.push({ ...recurso, gif, emDestaque: false });\n } else {\n aux.naoContratados.push({ ...recurso, gif, emDestaque: recurso.slugRecurso === recursoEmDestaque });\n }\n });\n\n if (recursoEmDestaque) aux.naoContratados.sort((a) => (a.emDestaque ? -1 : 1));\n\n return aux;\n }, [_recursos, recursosGifs, recursoEmDestaque]);\n\n const adquirirRecurso = async (recurso: IRecurso) => {\n try {\n setLoading(true);\n await contratarRecursoMutation.mutateAsync(recurso.codigoRecurso);\n\n meuPlanoQuery.refetch();\n setNotification({ title: 'Novo recurso adquirido' });\n setLoading(false);\n\n onContratarRecurso?.(recurso);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n const removerRecurso = async (recurso: IRecurso) => {\n try {\n setLoading(true);\n await descontratarRecursoMutation.mutateAsync(recurso.codigoRecurso);\n\n meuPlanoQuery.refetch();\n setNotification({ title: 'O recurso foi removido' });\n setLoading(false);\n\n onRemoverRecurso?.(recurso);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n const handleCloseDialog = () => setOpenedDialog(null);\n\n const handleClickRecurso = (recurso: IRecurso) => setOpenedDialog({ open: 'gif', recurso });\n\n const handleAdquirirRecurso = (recurso: IRecurso) => setOpenedDialog({ open: 'confirmacaoAdquirir', recurso });\n\n const handleRemoverRecurso = (recurso: IRecurso) => setOpenedDialog({ open: 'confirmacaoRemover', recurso });\n\n return {\n sistemaNome,\n isFetched: meuPlanoQuery.isFetched,\n telefoneSuporte,\n telefoneCS,\n recursos,\n periodicidadeLabel,\n handleClickRecurso,\n openedDialog,\n handleCloseDialog,\n handleAdquirirRecurso,\n handleRemoverRecurso,\n adquirirRecurso,\n removerRecurso,\n };\n};\n\nexport default useRecursosDialog;\n","import { Dialog, LIcon } from '@s_mart/core';\nimport { lineWhatsApp } from '@s_mart/regular-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, CircularProgress, Divider, Grid, Typography } from '@mui/material';\n\nimport { useDialog } from '../../hooks/useDialog';\nimport openWhatsapp from '../../utils/openWhatsapp';\nimport { ConfirmacaoAdquirirDialog } from './confirmacaoAdquirirDialog/confirmacaoAdquirirDialog';\nimport { ConfirmacaoRemoverDialog } from './confirmacaoRemoverDialog/confirmacaoRemoverDialog';\nimport { EmptyState } from './emptyState/emptyState';\nimport { GifDialog } from './gifDialog/gifDialog';\nimport { Recurso } from './recurso/recurso';\nimport type { RecursosDialogProps } from './recursosDialog.types';\nimport useRecursosDialog from './useRecursosDialog';\n\nexport function RecursosDialog({ onClose }: Pick<RecursosDialogProps, 'onClose'>) {\n const {\n sistemaNome,\n isFetched,\n telefoneSuporte,\n telefoneCS,\n recursos,\n periodicidadeLabel,\n handleClickRecurso,\n openedDialog,\n handleAdquirirRecurso,\n handleCloseDialog,\n handleRemoverRecurso,\n adquirirRecurso,\n removerRecurso,\n } = useRecursosDialog();\n const { open, onCloseDialog } = useDialog(onClose);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onCloseDialog}\n fullWidth\n maxWidth='lg'\n closeIcon\n disableBackdropClick\n >\n <Dialog.Header>Recursos {sistemaNome}</Dialog.Header>\n\n {isFetched ? (\n <>\n <Dialog.Content style={{ marginTop: '1rem' }}>\n <Grid container spacing={2}>\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center' }}>\n <Typography variant='titleSM'>Recursos feitos para ajudar você</Typography>\n\n <Divider sx={{ flex: 1, marginLeft: '1rem', color: colorPalette.neutral[30] }} />\n </Grid>\n\n <Grid size={12}>\n <Grid container spacing={2}>\n {recursos.naoContratados.length ? (\n recursos.naoContratados.map((recurso) => (\n <Grid\n key={recurso.codigoRecurso}\n size={{ xs: 12, sm: recurso.emDestaque ? 12 : 6 }}\n >\n <Recurso\n recurso={recurso}\n periodicidade={periodicidadeLabel}\n onClick={handleClickRecurso}\n onAdquirir={handleAdquirirRecurso}\n onRemover={handleRemoverRecurso}\n />\n </Grid>\n ))\n ) : (\n <EmptyState />\n )}\n </Grid>\n </Grid>\n\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center' }}>\n <Typography variant='titleSM'>Recursos que você já adquiriu</Typography>\n\n <Divider sx={{ flex: 1, marginLeft: '1rem', color: colorPalette.neutral[30] }} />\n </Grid>\n\n <Grid size={12}>\n <Grid container spacing={2}>\n {recursos.contratados.map((recurso) => (\n <Grid key={recurso.codigoRecurso} size={{ xs: 12, sm: 6 }}>\n <Recurso\n recurso={recurso}\n periodicidade={periodicidadeLabel}\n onClick={handleClickRecurso}\n onAdquirir={handleAdquirirRecurso}\n onRemover={handleRemoverRecurso}\n />\n </Grid>\n ))}\n </Grid>\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button\n variant='outlined'\n color='neutral'\n startIcon={<LIcon icon={lineWhatsApp} size='22px' removeMargin />}\n onClick={() => openWhatsapp(telefoneCS || telefoneSuporte)}\n >\n Preciso de Ajuda\n </Button>\n </Dialog.Footer>\n </>\n ) : (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '20vh',\n }}\n >\n <CircularProgress />\n </div>\n )}\n </Dialog>\n\n {openedDialog?.open === 'gif' && (\n <GifDialog\n recurso={openedDialog.recurso}\n onClose={handleCloseDialog}\n onAdquirirRecurso={adquirirRecurso}\n onRemoverRecurso={removerRecurso}\n />\n )}\n\n {openedDialog?.open === 'confirmacaoAdquirir' && (\n <ConfirmacaoAdquirirDialog\n recurso={openedDialog.recurso}\n onClose={handleCloseDialog}\n onConfirmar={adquirirRecurso}\n />\n )}\n\n {openedDialog?.open === 'confirmacaoRemover' && (\n <ConfirmacaoRemoverDialog\n recurso={openedDialog.recurso}\n onClose={handleCloseDialog}\n onRemover={removerRecurso}\n />\n )}\n </>\n );\n}\n","import { NotificationProvider } from '../../context/notificationProvider';\nimport { RecursosDialog as RecursosDialogComp } from './recursosDialog';\nimport type { RecursosDialogProps } from './recursosDialog.types';\n\nexport function RecursosDialog({ onClose, onNotification }: RecursosDialogProps) {\n return (\n <NotificationProvider onNotification={onNotification}>\n <RecursosDialogComp onClose={onClose} />\n </NotificationProvider>\n );\n}\n","import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { type PropsWithChildren, useState } from 'react';\n\nexport function MinhaContaQueryProvider({ children }: PropsWithChildren) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n staleTime: 5 * 60 * 1000,\n gcTime: 5 * 60 * 1000,\n },\n },\n }),\n );\n\n return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;\n}\n","import type { AxiosInstance } from 'axios';\n\nexport class ApiConfirmarEmail {\n private axiosSistemaPublico: AxiosInstance;\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosSistemaPublico = axiosInstance;\n }\n\n confirmarEmailEmpresa(token: string) {\n return this.axiosSistemaPublico.post(`/meus-dados/confirmar-atualizacao-do-email-da-empresa/${token}`);\n }\n confirmarEmailResponsavel(token: string) {\n return this.axiosSistemaPublico.post(`/meus-dados/confirmar-atualizacao-do-email-do-responsavel/${token}`);\n }\n}\n","import { styled } from '@mui/material';\nimport { Grid } from '@mui/material';\n\nexport const SBody = styled(Grid)`\n height: 100vh;\n\n background: ${({ theme }) => theme?.palette?.primary?.main};\n`;\n\nexport const SCardGrid = styled(Grid)`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n\n background-color: #ffffff;\n padding: 32px;\n border-radius: 8px;\n`;\n","import { useCallback, useLayoutEffect } from 'react';\nimport parseError from '../../utils/parseError';\nimport type { ConfirmarEmailProps } from './confirmarEmail.types';\n\nexport const useConfirmarEmail = (props: ConfirmarEmailProps) => {\n const token = new URLSearchParams(window.location.search).get('token');\n\n const confirmarEmail = useCallback(\n async (token: string | null) => {\n try {\n if (token && props.tipo === 'empresa') await props.api.confirmarEmailEmpresa(token);\n else if (token && props.tipo === 'responsável') await props.api.confirmarEmailResponsavel(token);\n } catch (error) {\n const parsedError = parseError((error as any)?.response?.data || error);\n\n props.onNotification({ variant: 'error', title: parsedError[0] });\n }\n },\n [props.tipo, props.onNotification, props.api.confirmarEmailEmpresa, props.api.confirmarEmailResponsavel],\n );\n\n useLayoutEffect(() => {\n confirmarEmail(token);\n }, [confirmarEmail, token]);\n};\n","import { Button, Typography } from '@mui/material';\nimport { NotificationProvider } from '../../context/notificationProvider';\nimport { SBody, SCardGrid } from './confirmarEmail.styles';\nimport type { ConfirmarEmailProps } from './confirmarEmail.types';\nimport { useConfirmarEmail } from './useConfirmarEmail';\n\nexport function ConfirmarEmail(props: ConfirmarEmailProps) {\n useConfirmarEmail(props);\n\n return (\n <NotificationProvider onNotification={props.onNotification}>\n <SBody container sx={{ justifyContent: 'center', alignItems: 'center' }}>\n <SCardGrid size={{ sm: 5, md: 4, lg: 3 }}>\n <div>\n <img src={props.imagem} alt='E-mail confirmado' style={{ width: '150px' }} />\n </div>\n\n <div style={{ display: 'flex' }}>\n <Typography variant='bodyXL' align='center'>\n E-mail {props.tipo === 'empresa' ? 'da' : 'do'} {props.tipo}\n <br />\n alterado com sucesso!\n </Typography>\n </div>\n\n <div>\n <Button size='large' onClick={props.onSubmit}>\n Continuar para o sistema\n </Button>\n </div>\n </SCardGrid>\n </SBody>\n </NotificationProvider>\n );\n}\n","import { css, styled } from '@mui/material';\n\nimport { Paper, type PaperProps } from '@mui/material';\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface SPaperProps extends PaperProps {\n centerContent?: boolean;\n height?: string;\n}\n\nexport const SPaper = styled(Paper)<SPaperProps>`\n background-color: ${colorPalette.neutral[0]};\n box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.12);\n border-radius: 8px;\n padding: 1.5rem;\n\n height: ${({ height }) => height};\n\n ${({ centerContent }) =>\n !!centerContent &&\n css`\n display: flex;\n justify-content: center;\n align-items: center;\n `}\n\n @media(max-width: 600px) {\n padding: 1rem;\n box-shadow: none;\n }\n`;\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { type FormEventHandler, useCallback } from 'react';\nimport { useFieldArray, useForm } from 'react-hook-form';\nimport { useApi } from '../../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../../context/notificationProvider';\nimport type {\n AlterarEmailCobrancaDialogFormValues,\n AlterarEmailCobrancaDialogProps,\n} from './alterarEmailCobrancaDialog.types';\n\nexport const useAlterarEmailCobrancaDialog = ({ onClose }: AlterarEmailCobrancaDialogProps) => {\n const api = useApi();\n const queryClient = useQueryClient();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n\n const { setNotification, handleErrors } = useNotificationContext();\n\n const atualizarEmailCobrancaMutation = useMutation({\n ...api.atualizarEmailCobrancas(),\n onSuccess() {\n onClose();\n setNotification({\n title: 'Email de cobrança atualizado com sucesso!',\n variant: 'success',\n });\n },\n onError: handleErrors.bind(null),\n });\n\n const form = useForm<AlterarEmailCobrancaDialogFormValues>({\n async defaultValues() {\n const emails: AlterarEmailCobrancaDialogFormValues['emails'] = [];\n\n const response = await queryClient.ensureQueryData(api.buscarMeusDados());\n\n response.data.data.emailCobranca?.split(';').map((email) => {\n emails.push({ email: email.trim() });\n });\n\n return { emails };\n },\n });\n const { fields, remove, append } = useFieldArray({\n name: 'emails',\n control: form.control,\n });\n\n const maxFields = fields.length === 3;\n\n const handleFormSubmit: FormEventHandler = useCallback(\n async (e) => {\n return form.handleSubmit(async (values) => {\n const emails = values.emails.map((it) => it.email).join(';');\n await atualizarEmailCobrancaMutation.mutateAsync({ emails });\n await meusDadosQuery.refetch();\n })(e);\n },\n [form.handleSubmit, atualizarEmailCobrancaMutation.mutateAsync, meusDadosQuery.refetch],\n );\n\n const emailUnico = (index: number) => {\n return {\n validate: {\n ['emailUnico']: (value: string) => {\n const emails = form.getValues('emails');\n const emailsRepetidos = emails.filter((it) => !!it.email && it.email === value);\n\n if (emailsRepetidos.length > 1) {\n if (index === emails.findLastIndex((it) => it.email === value)) {\n return 'E-mail já inserido';\n }\n }\n },\n },\n };\n };\n\n return {\n fields,\n remove,\n append,\n maxFields,\n handleFormSubmit,\n emailUnico,\n form,\n };\n};\n","import type { FC } from 'react';\n\nimport { Dialog, IconButton, LIcon } from '@s_mart/core';\nimport { TextField } from '@s_mart/form';\nimport { lineTrashAlt } from '@s_mart/regular-icons';\nimport { composeValidators, email, requiredWithTrim } from '@s_mart/rules';\nimport { linePlus } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, InputAdornment, Skeleton, Typography } from '@mui/material';\nimport { FormProvider } from 'react-hook-form';\n\nimport type { AlterarEmailCobrancaDialogProps } from './alterarEmailCobrancaDialog.types';\nimport { useAlterarEmailCobrancaDialog } from './useAlterarEmailCobrancaDialog';\n\nconst AlterarEmailCobrancaDialog: FC<AlterarEmailCobrancaDialogProps> = ({ onClose }) => {\n const { append, fields, remove, maxFields, form, handleFormSubmit, emailUnico } =\n useAlterarEmailCobrancaDialog({\n onClose,\n });\n\n return (\n <Dialog open fullWidth closeIcon disableBackdropClick onClose={onClose}>\n <FormProvider {...form}>\n <form onSubmit={handleFormSubmit}>\n <Dialog.Header>E-mails para recebimento dos boletos</Dialog.Header>\n\n <Dialog.Content>\n {form.formState.isLoading ? (\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Skeleton height='3rem' />\n <Skeleton height='3rem' />\n </div>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {fields.map((field, index) => (\n <div key={field.id} style={{ display: 'flex', gap: '0.5rem' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '0 0.8rem',\n borderRadius: '4px',\n color: colorPalette.neutral[0],\n backgroundColor: colorPalette.neutral[100],\n }}\n >\n <Typography variant='bodyXS'>{index + 1}</Typography>\n </div>\n\n <div style={{ flex: 1 }}>\n <TextField\n name={`emails.${index}.email`}\n placeholder='Informe o e-mail'\n required\n rules={composeValidators([\n requiredWithTrim,\n email,\n emailUnico(index) as any,\n ])}\n autoComplete='on'\n slotProps={{\n htmlInput: {\n //utilizado o name dentro da htmlInput para aparecer as opções do autoComplete\n name: 'pesquisar',\n },\n input: {\n endAdornment: index > 0 && (\n <InputAdornment position='end'>\n <IconButton onClick={() => remove(index)} variant='text'>\n <LIcon\n size='24px'\n icon={lineTrashAlt}\n color={colorPalette.neutral[100]}\n />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n />\n </div>\n </div>\n ))}\n\n {!maxFields && (\n <Button\n color='neutral'\n variant='dashed'\n fullWidth\n onClick={() => append({ email: '' })}\n startIcon={\n <LIcon removeMargin icon={linePlus} color={colorPalette.neutral[100]} />\n }\n >\n Adicionar outro e-mail\n </Button>\n )}\n </div>\n )}\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button variant='neutral' onClick={onClose}>\n Cancelar\n </Button>\n\n <Button type='submit' disabled={!form.formState.isDirty}>\n Salvar\n </Button>\n </Dialog.Footer>\n </form>\n </FormProvider>\n </Dialog>\n );\n};\n\nexport default AlterarEmailCobrancaDialog;\n","import { Grid, Paper, Typography } from '@mui/material';\n\nimport { useMinhaContaStore } from '../../../../context/minhaContaProvider';\n\nexport function EmptyState() {\n const faturasEmptyStateImg = useMinhaContaStore((state) => state.meuPlano.faturasEmptyStateImg);\n\n return (\n <Paper elevation={2} sx={{ padding: '1rem', borderRadius: '.5rem' }}>\n <Grid\n container\n spacing={2}\n sx={{ flexDirection: 'column', justifyContent: 'center', alignItems: 'center', minHeight: '25rem' }}\n >\n {!!faturasEmptyStateImg && (\n <Grid>\n <img src={faturasEmptyStateImg} />\n </Grid>\n )}\n\n <Grid sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleMD'>Nenhuma fatura para mostrar</Typography>\n </Grid>\n\n <Grid>\n <Typography variant='bodyMD'>Você não possui faturas.</Typography>\n </Grid>\n </Grid>\n </Paper>\n );\n}\n","import { Button, Chip, Tooltip, Typography } from '@mui/material';\nimport type { GridColDef } from '@mui/x-data-grid';\nimport { LIcon } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { lineInfoCircle } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\nimport { downloadFile } from '@s_mart/utils';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { useCallback, useMemo } from 'react';\nimport { useApi, useMinhaContaStore } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { ItemListarCobrancasResponse } from '../../../helpers/contrateApi/meusDadosApi.types';\nimport { useAppStore } from '../../../store/app/useAppStore';\n\ndayjs.extend(utc);\n\ntype Acao = {\n label: string;\n onClick: () => void;\n variant: 'contained' | 'outlined' | 'text';\n};\n\nconst useFaturas = () => {\n const { handleErrors } = useNotificationContext();\n const setLoading = useAppStore((state) => state.setLoading);\n\n const exibirAbrirFatura = useMinhaContaStore((s) => s.meuPlano.exibirAbrirFatura);\n\n const queryClient = useQueryClient();\n const api = useApi();\n const minhaEmpresaQuery = useQuery(api.buscarMeusDados());\n const cobrancasQuery = useQuery({\n ...api.listarCobrancas(),\n select: (response) => response.data.data.toReversed(),\n });\n\n const emailCobranca = minhaEmpresaQuery.data?.data.data.emailCobranca;\n const cobrancas = cobrancasQuery.data;\n\n const listaEmailsCobranca = useMemo(() => {\n if (emailCobranca) {\n const emailArray = emailCobranca.split(';');\n const total = emailArray.length - 1;\n\n return `${emailArray[0]} ${total > 0 ? `e mais ${total}` : ''}`;\n }\n }, [emailCobranca]);\n\n // const { isFetching: loading, data: cobrancas } = useFetchCobrancas();\n\n const tableStatus = useMemo(() => {\n let status: 'loading' | 'empty' | null = null;\n\n if (cobrancasQuery.isFetching) {\n status = 'loading';\n } else if (cobrancas && !cobrancas.length) {\n status = 'empty';\n } else {\n status = null;\n }\n\n return status;\n }, [cobrancasQuery.isFetching, cobrancas]);\n\n const getSituacao = useCallback((row: ItemListarCobrancasResponse) => {\n switch (row.situacao) {\n case 'EMITIDO': {\n // Converte as 2 datas em UTC pra não dar pau na comparação\n const today = dayjs().startOf('day');\n let dataVencimento = dayjs(row.dataVencimento?.replace('Z', '')).startOf('day'); // Tira o \"Z\" pois não está realmente em UTC\n\n if (today.isAfter(dataVencimento)) {\n if (dayjs(dataVencimento).day() === 6)\n dataVencimento = dataVencimento.add(2, 'd'); // Sábado\n else if (dayjs(dataVencimento).day() === 0) dataVencimento = dataVencimento.add(1, 'd'); // Domingo\n }\n\n if (today.isAfter(dataVencimento)) {\n return { label: 'Vencida', color: colorPalette.red[100] };\n } else {\n return { label: 'A pagar', color: colorPalette.neutral[30] };\n }\n }\n case 'LIQUIDADO': {\n return { label: 'Paga', color: colorPalette.green[100] };\n }\n case 'ISENTADO': {\n return { label: 'Isenta', color: colorPalette.neutral[50] };\n }\n default: {\n return { label: '', color: colorPalette.neutral[0] };\n }\n }\n }, []);\n\n const handleFetchBoleto = useCallback(\n async (row: ItemListarCobrancasResponse) => {\n try {\n setLoading(true);\n\n const res = await queryClient.ensureQueryData(api.buscarBoleto(row.identificador));\n\n if (res.data.data.boleto)\n downloadFile(\n res.data.data.boleto,\n `Boleto_${dayjs(row.dataEmissao).format('YYYY[_]MM')}.pdf`,\n 'application/pdf',\n );\n } catch (err) {\n handleErrors(err);\n } finally {\n setLoading(false);\n }\n },\n [setLoading, handleErrors, queryClient.ensureQueryData, api.buscarBoleto],\n );\n\n const handleFetchNfse = useCallback(\n async (row: ItemListarCobrancasResponse) => {\n try {\n setLoading(true);\n\n const res = await queryClient.ensureQueryData(api.buscarNfse(row.identificador));\n\n if (res.data.data) {\n if (res.data.data.xml)\n downloadFile(\n res.data.data.xml,\n `Nota_XML_${dayjs(row.dataEmissao).format('YYYY[_]MM')}.xml`,\n 'text/xml',\n );\n\n if (res.data.data.danfse) {\n downloadFile(\n res.data.data.danfse,\n `Nota_PDF_${dayjs(row.dataEmissao).format('YYYY[_]MM')}.pdf`,\n 'application/pdf',\n );\n } else if (res.data.data.link_impressao_danfse) {\n window.open(\n res.data.data.link_impressao_danfse,\n '_blank',\n 'noopener=yes,noreferrer=yes',\n );\n }\n }\n } catch (err) {\n handleErrors(err);\n } finally {\n setLoading(false);\n }\n },\n [queryClient.ensureQueryData, setLoading, handleErrors, api.buscarNfse],\n );\n const abrirFatura = useCallback((row: ItemListarCobrancasResponse) => {\n const link = window.location.host.includes('staging')\n ? row.linkFatura.replace('app', 'staging')\n : row.linkFatura;\n window.open(link, '_blank', 'noreferrer=yes,noopener=yes');\n }, []);\n\n const getActions = useCallback(\n (row: ItemListarCobrancasResponse): Acao[] => {\n switch (row.situacao) {\n case 'EMITIDO': {\n if (exibirAbrirFatura) {\n return [\n { label: 'Ver e pagar fatura', variant: 'contained', onClick: () => abrirFatura(row) },\n ];\n }\n\n return [{ label: 'Baixar boleto', variant: 'text', onClick: () => handleFetchBoleto(row) }];\n }\n case 'LIQUIDADO': {\n const acoes: Acao[] = [];\n if (row.linkFatura) {\n acoes.push({ label: 'Ver fatura', variant: 'outlined', onClick: () => abrirFatura(row) });\n }\n acoes.push({ label: 'Baixar nota', variant: 'text', onClick: () => handleFetchNfse(row) });\n return acoes;\n }\n default:\n return [];\n }\n },\n [handleFetchBoleto, handleFetchNfse, abrirFatura, exibirAbrirFatura],\n );\n\n const tableColumns = useMemo(\n (): GridColDef<ItemListarCobrancasResponse>[] => [\n {\n field: 'dataVencimento',\n headerName: 'Vencimento',\n flex: 2,\n minWidth: 100,\n valueFormatter: (value: ItemListarCobrancasResponse['dataVencimento']) =>\n dayjs(value).utc().format('DD/MM/YYYY'),\n },\n {\n field: 'situacao',\n headerName: 'Situação',\n flex: 2,\n minWidth: 105,\n valueGetter: (\n _: ItemListarCobrancasResponse['situacao'],\n row: ItemListarCobrancasResponse,\n ) => getSituacao(row),\n renderCell: ({ value }) => (\n <Chip label={value.label} style={{ backgroundColor: value.color, minWidth: '6.5rem' }} />\n ),\n },\n {\n field: 'descricao',\n headerName: 'Ref',\n renderCell: ({ value }) => (\n <Tooltip title={<Typography variant='bodySM'>{value}</Typography>}>\n <div>\n <LIcon icon={lineInfoCircle} color={colorPalette.neutral[100]} />\n </div>\n </Tooltip>\n ),\n width: 70,\n },\n {\n field: 'valor',\n headerName: 'Valor',\n flex: 1.5,\n minWidth: 130,\n renderCell: ({ formattedValue }) => (\n <Typography variant='titleXS'>{formattedValue}</Typography>\n ),\n valueFormatter: (value: ItemListarCobrancasResponse['valor']) => valorMask.format(value),\n },\n {\n field: 'acao',\n headerName: 'Ações',\n flex: 1.5,\n minWidth: 230,\n align: 'center',\n headerAlign: 'center',\n renderCell: ({ value }) => (\n <div\n style={{\n display: 'flex',\n gap: '0.5rem',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n }}\n >\n {(value as Acao[])?.map((acao) => (\n <Button\n key={acao.label}\n size='small'\n color={acao.variant === 'text' ? 'neutral' : undefined}\n variant={acao.variant}\n onClick={acao.onClick}\n sx={{ textDecoration: acao.variant === 'text' ? 'underline' : undefined }}\n >\n {acao.label}\n </Button>\n ))}\n </div>\n ),\n valueGetter: (value: never, row: ItemListarCobrancasResponse) => getActions(row),\n },\n ],\n [getActions, getSituacao],\n );\n\n return {\n cobrancas,\n tableStatus,\n tableColumns,\n listaEmailsCobranca,\n getActions,\n getSituacao,\n loading: cobrancasQuery.isFetching,\n };\n};\n\nexport default useFaturas;\n","export interface BuscarMeusDadosResponse {\n alteracaoDoEmailDaEmpresa: {\n data_expiracao: string;\n novo_email: string;\n } | null;\n alteracaoDoEmailDoResponsavel: {\n data_expiracao: string;\n novo_email: string;\n } | null;\n bairro: string | null;\n cep: string | null;\n cidade: string | null;\n codigoCidade: number | null;\n complemento: string | null;\n cpfCnpj: string | null;\n dataBloqueio: string | null;\n dataContratacao: string | null;\n dataInativacao: string | null;\n email: string | null;\n emailCobranca: string | null;\n emailResponsavel: string | null;\n exibirAbaMeuPlano: boolean | null;\n fone: string | null;\n foneResponsavel: string | null;\n funruralDescricao: string | null;\n funruralTipo: number | null;\n ie: string | null;\n logotipo: {\n conteudo: string;\n mimetype: string;\n nome: string;\n tamanho: number;\n } | null;\n motivoInativacao: string | null;\n nomeFantasia: string | null;\n nomeResponsavel: string | null;\n numero: string | null;\n razaoSocial: string | null;\n regimeTributario: number | null;\n rntrc: string | null;\n rntrcDataVencimento: string | null;\n rua: string | null;\n situacao: number | null;\n tipoPessoa: number | null;\n uf: string | null;\n}\n\nexport interface AtualizarMeusDadosBody {\n bairro: string;\n cep: string;\n codigoCidade: number;\n complemento: string;\n email: string;\n emailResponsavel: string;\n fone: string;\n foneResponsavel: string;\n funruralRescricao: string;\n funruralTipo: number;\n ie: string;\n logotipo: {\n conteudo: string;\n nome: string;\n mimetype: string;\n tamanho: number;\n };\n nomeFantasia: string;\n nomeResponsavel: string;\n numero: string;\n razaoSocial: string;\n regimeTributario: number;\n rntrc: string;\n rntrcDataVencimento: string;\n rua: string;\n}\n\nexport interface MeuPlanoRecursosResponse {\n codigoGrupo: number | null;\n codigoPlano: number | null;\n dataContratacao: string | null;\n descricaoPlano: string | null;\n diaVencimentoBoleto: number | null;\n diasCarencia: number | null;\n nomePlano: string | null;\n observacaoPlano: number | null;\n periodicidade: Periodicidade | null;\n qtdeBilhetagem: number | null;\n recursos: IMeuPlanoRecurso[] | null;\n tipoAcesso: number | null;\n tipoCobranca: TipoCobranca | null;\n valor: number | null;\n codigoPlanoEmpresa: number | null;\n valorBilhetagem: number | null;\n bilhetagemExcedenteAtiva: number | null;\n dataInicioUltimaFatura: string | null;\n dataFimUltimaFatura: string | null;\n}\n\nexport interface IMeuPlanoRecurso {\n caminhoImagem: string;\n codigoRecurso: number;\n dataContratacaoRecurso: string;\n dataExclusaoRecurso: string | null;\n dataSolicitacaoExcRecurso: string | null;\n descricaoRecurso: string;\n nomeRecurso: string;\n recursoContratado: boolean;\n slugRecurso: string;\n valorRecurso: number;\n}\n\nexport interface ItemListarCobrancasResponse {\n dataBaixa: string | null;\n dataEmissao: string;\n dataPagamento: string | null;\n dataVencimento: string | null;\n descricao: string | null;\n linkFatura: string;\n formaPagamento: 1 | 3; // 1-Boleto ; 3-Cartão de crédito\n identificador: string;\n nfseEmitida: 1 | 0;\n observacaoInterna: string | null;\n situacao: CobrancaSituacao;\n valor: number;\n}\n\nexport type CobrancaSituacao = 'EMITIDO' | 'LIQUIDADO' | 'BAIXADO' | 'ISENTADO';\n\nexport interface BuscarBoletoResponse {\n boleto: string;\n}\n\nexport interface BuscarNfseResponse {\n danfse?: string;\n link_impressao_danfse: string;\n xml: string;\n}\n\nexport interface BuscarPlanoPayload {\n path: { codigo: number };\n params: { periodicidade: Periodicidade };\n}\n\nexport enum TipoCobranca {\n PRE_PAGO = 1,\n POS_PAGO = 2,\n}\n\nexport enum Periodicidade {\n MENSAL = 0,\n TRIMESTRAL = 1,\n SEMESTRAL = 2,\n ANUAL = 3,\n}\n\nexport enum TipoAcesso {\n PUBLICO = 0,\n PRIVADO = 1,\n}\n\nexport interface BuscarPlanoResponse {\n codigo: number;\n nome: string;\n recursos: IPlanoRecurso[];\n valores: {\n codigoValor: number;\n periodicidade: Periodicidade;\n tipoCobranca: TipoCobranca;\n valor: number;\n }[];\n}\n\nexport interface IPlanoRecurso {\n codigoRecurso: string;\n nomeRecurso: string;\n slugRecurso: string;\n valorRecurso: number;\n}\n\nexport interface AlterarPlanoPayload {\n codigoPlano: number;\n codigoPlanoValor: number;\n}\n\nexport interface AtualizarEmailsCobrancaBody {\n emails: string;\n}\n","import { useMemo } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { TipoCobranca } from '../../../helpers/contrateApi/meusDadosApi.types';\n\ndayjs.extend(utc);\n\nexport const useProximaFatura = () => {\n const api = useApi();\n const meuPlanoRecursosQuery = useQuery(api.buscarMeuPlanoRecursos());\n const cobrancasQuery = useQuery(api.listarCobrancas());\n const minhaEmpresaQuery = useQuery(api.buscarMeusDados());\n\n const cobrancas = cobrancasQuery.data?.data.data;\n const meuPlanoRecursos = meuPlanoRecursosQuery.data?.data.data;\n const minhaEmpresa = minhaEmpresaQuery.data?.data.data;\n\n return useMemo(() => {\n if (!cobrancas || !meuPlanoRecursos?.dataFimUltimaFatura) return null;\n let proximoVencimento = dayjs(meuPlanoRecursos?.dataFimUltimaFatura).utc().startOf('day');\n\n if (meuPlanoRecursos.tipoCobranca === TipoCobranca.POS_PAGO) {\n proximoVencimento = proximoVencimento.add(1, 'month').startOf('month');\n }\n\n if (minhaEmpresa?.dataBloqueio && dayjs().isAfter(proximoVencimento)) {\n if (meuPlanoRecursos.tipoCobranca === TipoCobranca.POS_PAGO) return null;\n\n return (\n <>\n <b>Próxima fatura</b>: será gerada em até 24 horas após o pagamento da fatura em atraso\n </>\n );\n }\n\n if (proximoVencimento.day() === 5) {\n // Sexta-feira\n proximoVencimento = proximoVencimento.set('hour', 12);\n } else {\n proximoVencimento = proximoVencimento.set('hour', 19);\n }\n\n return (\n <>\n <b>Próxima fatura</b>: será gerada em {proximoVencimento.format('DD/MM/YYYY[, às ]HH:mm')}\n </>\n );\n }, [cobrancas, meuPlanoRecursos, minhaEmpresa?.dataBloqueio]);\n};\n","import { useState } from 'react';\n\nimport { IconButton, LIcon } from '@s_mart/core';\nimport { DataTable, List } from '@s_mart/data';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { lineClock, lineReceipt } from '@s_mart/regular-icons';\nimport { linePen } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport {\n Alert,\n Button,\n Card,\n Chip,\n CircularProgress,\n Grid,\n Typography,\n useMediaQuery,\n} from '@mui/material';\nimport dayjs from 'dayjs';\n\nimport { SPaper } from '../../../shared/styles';\nimport AlterarEmailCobrancaDialog from './alterarEmailCobrancaDialog/alterarEmailCobrancaDialog';\nimport { EmptyState } from './emptyState/emptyState';\nimport useFaturas from './useFaturas';\nimport { useProximaFatura } from './useProximaFatura';\n\nexport function Faturas() {\n const {\n cobrancas,\n tableStatus,\n tableColumns,\n listaEmailsCobranca,\n getActions,\n getSituacao,\n loading,\n } = useFaturas();\n const proximaFatura = useProximaFatura();\n\n const [openAlterarEmailCobrancaDialog, setOpenAlterarEmailCobrancaDialog] = useState(false);\n const mobileList = useMediaQuery('(max-width: 700px)');\n\n if (loading) {\n return (\n <SPaper centerContent height='60vh'>\n <CircularProgress />\n </SPaper>\n );\n }\n\n if (tableStatus === 'empty') return <EmptyState />;\n\n return (\n <>\n <Card sx={{ padding: '1rem' }}>\n <Grid container spacing={2}>\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center' }}>\n <LIcon icon={lineReceipt} size='25px' />\n <Typography variant='titleSM'>Gerenciamento de faturas</Typography>\n </Grid>\n\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant='bodySM'>\n Boletos enviados para: {mobileList && <br />} <strong>{listaEmailsCobranca}</strong>\n </Typography>\n <IconButton\n size='small'\n variant='neutral'\n onClick={() => setOpenAlterarEmailCobrancaDialog(true)}\n >\n <LIcon icon={linePen} size='21px' removeMargin />\n </IconButton>\n </Grid>\n\n {!!proximaFatura && (\n <Grid size={12}>\n <Alert color='info' icon={<LIcon size='21px' removeMargin icon={lineClock} />}>\n <Typography color='info'>{proximaFatura}</Typography>\n </Alert>\n </Grid>\n )}\n {mobileList ? (\n <Grid size={12}>\n <List.Root data={cobrancas ?? []} isLoading={tableStatus === 'loading'}>\n {cobrancas?.map((fatura, index) => {\n const situacao = getSituacao(fatura);\n const action = getActions(fatura);\n const vencida = situacao.label === 'Vencida';\n\n return (\n <List.ListItem\n key={fatura.identificador || fatura.dataVencimento}\n index={index}\n style={{\n width: 'calc(100% + 2rem)',\n marginLeft: '-1rem',\n padding: '1.5rem 1rem',\n backgroundColor: vencida ? '#FFE3E3' : undefined,\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Chip\n label={situacao.label}\n size='small'\n style={{ backgroundColor: situacao.color, minWidth: '6.5rem' }}\n />\n\n <Typography\n variant='bodySM'\n color={vencida ? colorPalette.red[300] : undefined}\n >\n {dayjs(fatura.dataVencimento).format('DD/MM/YYYY')}\n </Typography>\n </div>\n\n <div style={{ margin: '0.75rem 0' }}>\n <Typography\n variant='bodyXS'\n color={vencida ? colorPalette.neutral[500] : colorPalette.neutral[100]}\n >\n {fatura.descricao}\n </Typography>\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography\n variant='titleXS'\n color={vencida ? colorPalette.red[300] : undefined}\n >\n {valorMask.format(fatura.valor)}\n </Typography>\n\n <div style={{ display: 'flex', gap: '0.75rem', alignItems: 'center' }}>\n {action.map((acao) =>\n acao.variant === 'text' ? (\n <Typography\n key={acao.label}\n variant='bodySM'\n color={vencida ? colorPalette.red[300] : undefined}\n style={{ textDecorationLine: 'underline', cursor: 'pointer' }}\n onClick={acao.onClick}\n sx={{\n fontWeight: vencida ? 700 : undefined\n }}\n >\n {acao.label}\n </Typography>\n ) : (\n <Button\n key={acao.label}\n size='small'\n variant={acao.variant}\n onClick={acao.onClick}\n >\n {acao.label}\n </Button>\n ),\n )}\n </div>\n </div>\n </List.ListItem>\n );\n })}\n </List.Root>\n </Grid>\n ) : (\n <Grid\n size={12}\n sx={{\n overflow: 'auto',\n maxHeight: '65vh',\n '@media(max-height: 750px)': { maxHeight: '60vh' },\n }}\n >\n <DataTable\n rows={cobrancas ?? []}\n loading={tableStatus === 'loading'}\n columns={tableColumns}\n getRowId={(row) => row.identificador || row.dataVencimento!}\n disableRowSelectionOnClick\n resizeThrottleMs={1000}\n />\n </Grid>\n )}\n </Grid>\n </Card>\n\n {openAlterarEmailCobrancaDialog && (\n <AlterarEmailCobrancaDialog onClose={() => setOpenAlterarEmailCobrancaDialog(false)} />\n )}\n </>\n );\n}\n","import { Grid, Typography } from '@mui/material';\nimport { LIcon } from '@s_mart/core';\nimport { lineExternalLink } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface TermosDeUsoProps {\n link: string;\n}\n\nexport function TermosDeUso({ link }: TermosDeUsoProps) {\n return (\n <Grid sx={{ display: 'flex', marginTop: '1.5rem' }}>\n <a\n href={link}\n rel='noopener noreferrer'\n target='_blank'\n style={{ display: 'flex', alignItems: 'center', color: colorPalette.neutral[100] }}\n >\n <Typography variant='bodySM'>Termos de uso</Typography>\n <LIcon icon={lineExternalLink} />\n </a>\n </Grid>\n );\n}\n","import { useEffect } from 'react';\n\nimport { useMinhaContaStore } from '../../context/minhaContaProvider';\n\nconst useMeuPlano = () => {\n const linkTermosDeUso = useMinhaContaStore((state) => state.meuPlano.linkTermosDeUso);\n const onRenderTabMeuPlano = useMinhaContaStore((state) => state.meuPlano.onRenderTabMeuPlano);\n const esconderInformacoesPlano = useMinhaContaStore((state) => state.meuPlano.esconderInformacoesPlano);\n\n useEffect(() => {\n onRenderTabMeuPlano?.();\n }, [onRenderTabMeuPlano]);\n\n return { linkTermosDeUso, esconderInformacoesPlano };\n};\n\nexport default useMeuPlano;\n","import { Grid, Paper } from '@mui/material';\nimport { memo, useState } from 'react';\nimport { MeuPlanoInfo } from '../../components/meuPlanoInfo/meuPlanoInfo';\nimport { PlanosDialog } from '../../components/planosDialog/planosDialog';\nimport { RecursosDialog } from '../../components/recursosDialog/recursosDialog';\nimport { useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { Faturas } from './faturas/faturas';\nimport { TermosDeUso } from './termosDeUso/termosDeUso';\nimport useMeuPlano from './useMeuPlano';\n\nfunction MeuPlanoComp() {\n const { linkTermosDeUso, esconderInformacoesPlano } = useMeuPlano();\n const [openDialog, setOpenDialog] = useState<'recursos' | 'planos' | null>(null);\n\n const esconderPlanos = useMinhaContaStore((state) => state.meuPlano.esconderPlanos);\n const esconderLojaDeRecursos = useMinhaContaStore((state) => state.meuPlano.esconderLojaDeRecursos);\n\n return (\n <>\n <Paper elevation={2} sx={{ padding: '1rem' }}>\n <Grid container spacing={4}>\n {!esconderInformacoesPlano && (\n <Grid size={{ xs: 12, md: 5, lg: 4, xl: 3 }}>\n <MeuPlanoInfo\n onClickButtonPlanos={() => setOpenDialog('planos')}\n onClickButtonLojaRecursos={() => setOpenDialog('recursos')}\n exibirLojaRecursos={!esconderLojaDeRecursos}\n exibirPlanos={!esconderPlanos}\n />\n\n {!!linkTermosDeUso && <TermosDeUso link={linkTermosDeUso} />}\n </Grid>\n )}\n\n <Grid size={{ xs: 12, md: 7, lg: 8, xl: 6 }}>\n <Faturas />\n </Grid>\n </Grid>\n </Paper>\n\n {openDialog === 'recursos' && <RecursosDialog onClose={() => setOpenDialog(null)} />}\n {openDialog === 'planos' && <PlanosDialog onClose={() => setOpenDialog(null)} />}\n </>\n );\n}\n\nexport const MeuPlano = memo(MeuPlanoComp);\n","import { styled } from '@mui/material';\nimport { Typography } from '@mui/material';\n\nexport const SHelperRNTRC = styled(Typography)`\n color: ${(props) => props?.theme?.palette?.primary?.main};\n cursor: pointer;\n\n a {\n text-decoration: none;\n color: ${(props) => props?.theme?.palette?.primary?.main};\n }\n`;\n","import { useCallback } from 'react';\n\nimport { useIsFetching, useQuery, useQueryClient } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport { useFormContext } from 'react-hook-form';\n\nimport { useApi, useMinhaContaStore, useSlotPropsStore } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { MinhaEmpresaFormValues } from '../minhaEmpresa.types';\n\nconst defaultSlotProps = {};\nconst useDadosEmpresa = () => {\n const camposAdicionais = useMinhaContaStore((state) => state.minhaEmpresa.camposAdicionais);\n const textFieldSlotPropsEmpresaEmail = useSlotPropsStore(\n (s) => s.textFieldEmpresaEmail ?? defaultSlotProps,\n );\n\n const queryClient = useQueryClient();\n const api = useApi();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n const dadosResponse = meusDadosQuery.data?.data.data;\n\n const empresaCnpj = dadosResponse?.cpfCnpj;\n const alteracaoDoEmailDaEmpresa = dadosResponse?.alteracaoDoEmailDaEmpresa;\n\n const { setValue, getValues } = useFormContext<MinhaEmpresaFormValues>();\n\n const { handleErrors, setNotification } = useNotificationContext();\n\n const buscandoRntrc = Boolean(\n useIsFetching({ queryKey: api.buscarRntrc(empresaCnpj!).queryKey }),\n );\n\n const onAtualizarRntrc = useCallback(async () => {\n if (buscandoRntrc || !empresaCnpj) return;\n\n try {\n const resp = await queryClient.ensureQueryData(api.buscarRntrc(empresaCnpj));\n\n if (resp?.data?.data?.rntrc) {\n const currentRntrc = getValues('empresa.rntrc');\n const rntrcDataVencimento = resp.data.data.data_validade\n ? dayjs(resp.data.data.data_validade, 'DD/MM/YYYY')\n : undefined;\n\n const rntrc = resp.data.data.rntrc.padStart(8, '0');\n\n setValue('empresa.rntrc', rntrc, { shouldDirty: true });\n setValue('empresa.rntrcDataVencimento', rntrcDataVencimento);\n\n if (rntrc === dadosResponse.rntrc && rntrc === currentRntrc) {\n setNotification({ title: 'Seu RNTRC já está atualizado', variant: 'info' });\n } else if (rntrc === currentRntrc) {\n setNotification({ title: 'O RNTRC já foi buscado', variant: 'info' });\n }\n } else {\n setNotification({ title: 'RNTRC não encontrado', variant: 'warning' });\n }\n } catch (error) {\n handleErrors(error);\n }\n }, [\n api.buscarRntrc,\n queryClient.ensureQueryData,\n buscandoRntrc,\n empresaCnpj,\n setValue,\n getValues,\n setNotification,\n handleErrors,\n dadosResponse?.rntrc,\n ]);\n\n return {\n onAtualizarRntrc,\n camposAdicionais,\n buscandoRntrc,\n alteracaoDoEmailDaEmpresa,\n textFieldSlotPropsEmpresaEmail,\n };\n};\n\nexport default useDadosEmpresa;\n","import { LIcon } from '@s_mart/core';\nimport { DatePicker, TextField } from '@s_mart/form';\nimport { composeValidators, cpfCnpj, email, maxLength, required, telefone } from '@s_mart/rules';\nimport { lineSync } from '@s_mart/solid-icons';\n\nimport { CircularProgress, Grid, Tooltip, Typography } from '@mui/material';\n\nimport { SHelperRNTRC } from './dadosEmpresa.styles';\nimport useDadosEmpresa from './useDadosEmpresa';\n\nexport function DadosEmpresa() {\n const {\n camposAdicionais,\n buscandoRntrc,\n onAtualizarRntrc,\n alteracaoDoEmailDaEmpresa,\n textFieldSlotPropsEmpresaEmail,\n } = useDadosEmpresa();\n\n return (\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant='titleSM'>Dados da empresa</Typography>\n\n {!!alteracaoDoEmailDaEmpresa && (\n <Tooltip\n placement='top-start'\n title={\n <Typography variant='titleXS'>\n Alteração de e-mail da empresa solicitada.\n <br /> Pendente a confirmação de e-mail.\n </Typography>\n }\n >\n <div style={{ display: 'inline' }}>\n <LIcon icon={lineSync} top='4px' />\n </div>\n </Tooltip>\n )}\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='empresa.cpfCnpj'\n label='CNPJ'\n mask='cpfCnpj'\n disabled\n required\n rules={composeValidators([required, cpfCnpj])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='empresa.razaoSocial'\n label='Razão social'\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='empresa.nomeFantasia'\n label='Nome fantasia'\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='empresa.email'\n label='E-mail da empresa'\n required\n rules={composeValidators([required, email])}\n {...textFieldSlotPropsEmpresaEmail}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='empresa.fone'\n label='Telefone da empresa'\n mask='telefone'\n required\n rules={composeValidators([required, telefone])}\n />\n </Grid>\n\n {camposAdicionais?.ie && (\n <Grid size={{ xs: 12, md: 4, ...camposAdicionais.ie.grid }}>\n <TextField\n name='empresa.ie'\n label='Inscrição estadual'\n required={camposAdicionais.ie.required}\n rules={camposAdicionais.ie.rules}\n mask='numero'\n />\n </Grid>\n )}\n\n {camposAdicionais?.rntrc && (\n <Grid size={{ xs: 12, sm: 6, md: 4, ...camposAdicionais.rntrc.grid }}>\n <TextField\n name='empresa.rntrc'\n label='RNTRC'\n mask='numero'\n disabled={buscandoRntrc}\n required={camposAdicionais.rntrc.required}\n rules={camposAdicionais.rntrc.rules}\n slotProps={{ htmlInput: { maxLength: 8 } }}\n />\n <SHelperRNTRC variant='bodyXXS' onClick={onAtualizarRntrc}>\n Buscar RNTRC\n {buscandoRntrc && (\n <CircularProgress size='0.5rem' thickness={5} style={{ marginLeft: '0.3rem' }} />\n )}\n </SHelperRNTRC>\n </Grid>\n )}\n\n {camposAdicionais?.rntrcVencimento && (\n <Grid size={{ xs: 12, sm: 6, md: 4, ...camposAdicionais.rntrcVencimento.grid }}>\n <DatePicker\n name='empresa.rntrcDataVencimento'\n label='Vencimento'\n disabled={buscandoRntrc}\n required={camposAdicionais.rntrcVencimento.required}\n rules={camposAdicionais.rntrcVencimento.rules}\n />\n <SHelperRNTRC variant='bodyXXS'>\n <a\n href='https://consultapublica.antt.gov.br/Site/ConsultaRNTRC.aspx/ConsultaPublica/'\n target='_blank'\n rel='noopener noreferrer'\n >\n Consultar site da ANTT\n </a>\n </SHelperRNTRC>\n </Grid>\n )}\n </Grid>\n );\n}\n","import { cep as cepValidator } from '@s_mart/rules';\nimport { useIsFetching, useQueryClient } from '@tanstack/react-query';\nimport debounce from 'lodash-es/debounce';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { AutocompleteOption } from '../../../shared/types';\nimport type { CidadeValue, MinhaEmpresaFormValues } from '../minhaEmpresa.types';\n\nconst useDadosEndereco = () => {\n const { getValues, setValue } = useFormContext<MinhaEmpresaFormValues>();\n const [cidades, setCidades] = useState<AutocompleteOption<CidadeValue>[]>([]);\n const { handleErrors } = useNotificationContext();\n const queryClient = useQueryClient();\n\n const api = useApi();\n\n const fetchingCep = Boolean(useIsFetching({ queryKey: api.buscarCep('').queryKey.slice(0, 2) }));\n\n const onChangeCep = useCallback(\n async (cep: string) => {\n const treatedCep = cep.replace(/\\D/g, '');\n\n if (treatedCep && !cepValidator.validate.cep(treatedCep) && treatedCep !== getValues('flags.ultimoCepBuscado')) {\n try {\n // Use ensureQueryData instead of fetchCep\n const resp = await queryClient.ensureQueryData(api.buscarCep(cep));\n\n if (resp.data.data.codigo_ibge)\n setValue('endereco.cidade', {\n label: `${resp.data.data.cidade}/${resp.data.data.uf}`,\n value: {\n codigo: resp.data.data.codigo_ibge,\n nome: resp.data.data.cidade,\n uf: resp.data.data.uf,\n },\n });\n if (resp.data.data.bairro) setValue('endereco.bairro', resp.data.data.bairro);\n if (resp.data.data.logradouro) setValue('endereco.rua', resp.data.data.logradouro);\n if (resp.data.data.complemento) setValue('endereco.complemento', resp.data.data.complemento);\n\n setValue('flags.ultimoCepBuscado', treatedCep);\n } catch (error) {\n console.error('Erro ao buscar CEP');\n console.error(error);\n }\n }\n },\n [getValues, queryClient.ensureQueryData, api.buscarCep, setValue],\n );\n\n const searchCidades = useCallback(\n async (search: string) => {\n try {\n const resp = await queryClient.ensureQueryData(api.pesquisarCidades(search));\n\n setCidades(\n resp.data?.data?.map((cidade) => ({\n label: `${cidade.nome}/${cidade.uf}`,\n value: { codigo: cidade.codigo, nome: cidade.nome, uf: cidade.uf },\n })),\n );\n } catch (error) {\n handleErrors(error);\n }\n },\n [api.pesquisarCidades, handleErrors, queryClient],\n );\n\n const onChangeInputCidades = useMemo(() => debounce(searchCidades, 500), [searchCidades]);\n\n const onFocusInputCidades = () => !cidades.length && searchCidades('');\n\n return { onChangeCep, fetchingCep, onChangeInputCidades, onFocusInputCidades, cidades };\n};\n\nexport default useDadosEndereco;\n","import { Creatable, TextField } from '@s_mart/form';\nimport { cep, composeValidators, maxLength, required } from '@s_mart/rules';\n\nimport { CircularProgress, Grid, Typography } from '@mui/material';\n\nimport useDadosEndereco from './useDadosEndereco';\n\nexport function DadosEndereco() {\n const { onChangeCep, fetchingCep, onChangeInputCidades, onFocusInputCidades, cidades } =\n useDadosEndereco();\n\n return (\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant='titleSM'>Endereço</Typography>\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.cep'\n label='CEP'\n mask='cep'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, cep])}\n onInputChange={onChangeCep}\n slotProps={{\n input: {\n endAdornment: fetchingCep && (\n <div style={{ display: 'flex' }}>\n <CircularProgress thickness={6} size='1.5rem' />\n </div>\n ),\n },\n }}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <Creatable\n name='endereco.cidade'\n label='Cidade/UF'\n options={cidades}\n onInputChange={onChangeInputCidades}\n onFocus={onFocusInputCidades}\n noOptionsText='Nenhuma cidade encontrada'\n disabled={fetchingCep}\n required\n rules={required}\n showCreatableButton={false}\n showEditableButton={false}\n getOptionKey={(opt) => opt.label}\n getOptionLabel={(opt) => opt.label}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.bairro'\n label='Bairro'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.rua'\n label='Rua'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.numero'\n label='Número'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.complemento'\n label='Complemento'\n disabled={fetchingCep}\n rules={maxLength(60)}\n />\n </Grid>\n </Grid>\n );\n}\n","import { Grid, Tooltip, Typography } from '@mui/material';\nimport { LIcon } from '@s_mart/core';\nimport { TextField } from '@s_mart/form';\nimport { composeValidators, maxLength, required, telefone } from '@s_mart/rules';\nimport { lineSync } from '@s_mart/solid-icons';\nimport { useQuery } from '@tanstack/react-query';\nimport { useApi } from '../../../context/minhaContaProvider';\n\nexport function DadosResponsavel() {\n const api = useApi();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n const meusDadosResponse = meusDadosQuery.data?.data.data;\n\n const alteracaoDoEmailDoResponsavel = meusDadosResponse?.alteracaoDoEmailDoResponsavel;\n\n return (\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant='titleSM'>Dados do responsável</Typography>\n\n {!!alteracaoDoEmailDoResponsavel && (\n <Tooltip\n placement='top-start'\n title={\n <Typography variant='titleXS'>\n Alteração de responsável solicitada.\n <br /> Pendente a confirmação de e-mail.\n </Typography>\n }\n >\n <div style={{ display: 'inline' }}>\n <LIcon icon={lineSync} top='4px' />\n </div>\n </Tooltip>\n )}\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='responsavel.nome'\n label='Nome do responsável'\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='responsavel.fone'\n label='Telefone do responsável'\n mask='telefone'\n required\n rules={composeValidators([required, telefone])}\n />\n </Grid>\n </Grid>\n );\n}\n","import { createResizedImage } from '@s_mart/utils';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useDropzone } from 'react-dropzone';\nimport { useFormContext, useWatch } from 'react-hook-form';\n\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { MinhaEmpresaFormValues } from '../minhaEmpresa.types';\n\nexport const useHeader = () => {\n const { open, getInputProps } = useDropzone({\n noKeyboard: true,\n multiple: false,\n accept: {\n 'image/jpeg': ['.jpeg', '.jpg'],\n 'image/png': ['.png'],\n },\n onDrop,\n });\n const api = useApi();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n\n const meusDadosResponse = meusDadosQuery.data?.data.data;\n\n const empresaNomeFantasia = meusDadosResponse?.nomeFantasia;\n const empresaRazaoSocial = meusDadosResponse?.razaoSocial;\n const { setNotification } = useNotificationContext();\n const {\n setValue,\n formState: { isDirty, isSubmitting },\n control,\n } = useFormContext<MinhaEmpresaFormValues>();\n\n const logo = useWatch({ control, name: 'logo' });\n\n const redimensionarArquivo = (file: File) =>\n new Promise((resolve) => {\n createResizedImage(\n file,\n 300,\n 600,\n 'JPEG',\n 100,\n 0,\n (uri) => {\n resolve(uri);\n },\n 'file',\n );\n });\n\n async function onDrop(files: File[]) {\n const arquivo = files?.[0];\n\n if (!arquivo)\n return setNotification({\n title: 'Selecione um arquivo válido',\n message: 'Formatos válidos: PNG, JPG e JPEG',\n variant: 'warning',\n duration: 10000,\n });\n if (!arquivo.type.startsWith('image/'))\n return setNotification({ title: 'Formato de imagem inválido', variant: 'warning' });\n if (arquivo.size > 200000)\n return setNotification({\n title: 'Arquivo muito grande (máximo 200kB)',\n variant: 'warning',\n duration: 5000,\n });\n\n const arquivoRedimensionado = (await redimensionarArquivo(arquivo)) as File;\n\n const reader = new FileReader();\n\n reader.onload = () => {\n if (!reader.result) return console.log('Ocorreu um erro ao ler o arquivo');\n\n setValue(\n 'logo',\n {\n conteudo: reader.result\n ?.toString()\n .replace(`data:${arquivoRedimensionado.type};base64,`, ''),\n nome: arquivoRedimensionado.name,\n mimetype: arquivoRedimensionado.type,\n tamanho: arquivoRedimensionado.size,\n },\n { shouldDirty: true },\n );\n };\n\n reader.readAsDataURL(arquivoRedimensionado);\n }\n\n const onRemoverLogo = () => setValue('logo', undefined, { shouldDirty: true });\n\n const getIniciaisEmpresa = (): string => {\n const text = empresaNomeFantasia || empresaRazaoSocial || '';\n\n return text\n .split(' ')\n .map((item) => item[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n };\n\n return { open, getInputProps, logo, getIniciaisEmpresa, onRemoverLogo, isDirty, isSubmitting };\n};\n","import { LIcon } from '@s_mart/core';\nimport { linePicture, lineSync, lineTrash } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Avatar, Button, CircularProgress, Grid, Typography, useMediaQuery } from '@mui/material';\n\nimport { useHeader } from './useHeader';\n\nexport function Header() {\n const { open, getInputProps, logo, onRemoverLogo, getIniciaisEmpresa, isDirty, isSubmitting } =\n useHeader();\n const mobileLayout = useMediaQuery('(max-width:600px)');\n\n return (\n <Grid\n container\n spacing={2}\n sx={{\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: mobileLayout ? 'wrap-reverse' : undefined,\n }}\n >\n <Grid sx={{ display: 'flex', alignItems: 'center', gap: mobileLayout ? '0.5rem' : '1rem' }}>\n <Avatar\n src={logo ? `data:${logo.mimetype};base64,${logo.conteudo}` : undefined}\n sx={{\n borderRadius: mobileLayout ? '10px' : '16px',\n height: mobileLayout ? '3rem' : '4rem',\n width: mobileLayout ? '3rem' : '4rem',\n backgroundColor: colorPalette.neutral[100],\n }}\n alt='Logotipo/empresa'\n >\n {!logo && getIniciaisEmpresa()}\n </Avatar>\n\n <input {...getInputProps()} />\n\n {logo ? (\n <>\n <Button\n type='button'\n variant='neutral'\n startIcon={mobileLayout ? undefined : <LIcon icon={lineSync} />}\n onClick={open}\n >\n Alterar logo\n </Button>\n\n <Button\n type='button'\n variant='outlined'\n color='error'\n startIcon={mobileLayout ? undefined : <LIcon icon={lineTrash} />}\n onClick={onRemoverLogo}\n >\n Remover\n </Button>\n </>\n ) : (\n <div>\n <Button\n type='button'\n variant='neutral'\n startIcon={<LIcon icon={linePicture} />}\n onClick={open}\n >\n Adicionar logo\n </Button>\n\n <Typography\n variant='bodyXXS'\n color={colorPalette.neutral[100]}\n style={{ display: 'block', marginTop: '0.3rem' }}\n >\n Utilize imagens no formato .jpg, .png ou .jpeg com\n <br /> tamanho recomendado de 300x160 pixels.\n </Typography>\n </div>\n )}\n </Grid>\n\n <Grid size={{ xs: 12, sm: 'auto' }}>\n <Button\n type='submit'\n disabled={isSubmitting || !isDirty}\n startIcon={\n isSubmitting && (\n <div style={{ display: 'flex' }}>\n <CircularProgress size='1rem' sx={{ color: '#FFF' }} />\n </div>\n )\n }\n fullWidth={mobileLayout}\n >\n Salvar informações\n </Button>\n </Grid>\n </Grid>\n );\n}\n","import dayjs from 'dayjs';\n\nimport type { AtualizarMeusDadosBody, BuscarMeusDadosResponse } from '../../helpers/contrateApi/meusDadosApi.types';\nimport type { MinhaEmpresaFormValues } from './minhaEmpresa.types';\n\nexport const assembleMinhaEmpresaForm = (values: BuscarMeusDadosResponse) => {\n const formValues = { empresa: {}, endereco: {}, responsavel: {}, flags: {} } as MinhaEmpresaFormValues;\n\n if (values.logotipo) formValues.logo = values.logotipo;\n\n if (values.cpfCnpj) formValues.empresa.cpfCnpj = values.cpfCnpj;\n if (values.razaoSocial) formValues.empresa.razaoSocial = values.razaoSocial;\n if (values.nomeFantasia) formValues.empresa.nomeFantasia = values.nomeFantasia;\n if (values.email) formValues.empresa.email = values.email;\n if (values.fone) formValues.empresa.fone = values.fone;\n if (values.ie) formValues.empresa.ie = values.ie;\n if (values.rntrc) formValues.empresa.rntrc = values.rntrc;\n if (values.rntrcDataVencimento && values.rntrcDataVencimento !== '0001-01-01T00:00:00Z')\n formValues.empresa.rntrcDataVencimento = dayjs(values.rntrcDataVencimento);\n\n if (values.cep) {\n formValues.endereco.cep = values.cep;\n formValues.flags.ultimoCepBuscado = values.cep;\n }\n if (values.cidade && values.codigoCidade && values.uf)\n formValues.endereco.cidade = {\n label: `${values.cidade}/${values.uf}`,\n value: { codigo: values.codigoCidade, nome: values.cidade, uf: values.uf },\n };\n if (values.bairro) formValues.endereco.bairro = values.bairro;\n if (values.rua) formValues.endereco.rua = values.rua;\n if (values.numero) formValues.endereco.numero = values.numero;\n if (values.complemento) formValues.endereco.complemento = values.complemento;\n\n if (values.nomeResponsavel) formValues.responsavel.nome = values.nomeResponsavel;\n if (values.emailResponsavel) formValues.responsavel.email = values.emailResponsavel;\n if (values.foneResponsavel) formValues.responsavel.fone = values.foneResponsavel;\n\n return formValues;\n};\n\nexport const assembleMinhaEmpresaQuery = (values: MinhaEmpresaFormValues) => {\n const query = {} as AtualizarMeusDadosBody;\n\n if (values.empresa) {\n const empresa = values.empresa;\n\n if (empresa.razaoSocial) query.razaoSocial = empresa.razaoSocial.trim();\n if (empresa.nomeFantasia) query.nomeFantasia = empresa.nomeFantasia.trim();\n if (empresa.email) query.email = empresa.email.toLowerCase().trim();\n if (empresa.ie) query.ie = empresa.ie;\n if (empresa.fone) query.fone = empresa.fone;\n\n query.rntrc = empresa.rntrc || '';\n if (empresa?.rntrcDataVencimento) {\n query.rntrcDataVencimento = empresa.rntrcDataVencimento.toISOString();\n } else {\n query.rntrcDataVencimento = '0001-01-01T00:00:00Z'; // tem que ser a data zero do golang\n }\n }\n\n if (values.endereco) {\n const endereco = values.endereco;\n\n if (endereco.cep) query.cep = endereco.cep;\n if (endereco.bairro) query.bairro = endereco.bairro;\n if (endereco.rua) query.rua = endereco.rua;\n if (endereco.numero) query.numero = endereco.numero;\n if (endereco.complemento) query.complemento = endereco.complemento;\n if (endereco.cidade?.value) query.codigoCidade = endereco.cidade.value.codigo;\n }\n\n if (values.responsavel) {\n const responsavel = values.responsavel;\n\n if (responsavel.nome) query.nomeResponsavel = responsavel.nome.trim();\n if (responsavel.email) query.emailResponsavel = responsavel.email.toLowerCase().trim();\n if (responsavel.fone) query.foneResponsavel = responsavel.fone;\n }\n\n if (values.logo)\n query.logotipo = {\n conteudo: values.logo.conteudo,\n nome: values.logo.nome,\n mimetype: values.logo.mimetype,\n tamanho: values.logo.tamanho,\n };\n\n return query;\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { type FormEventHandler, useCallback, useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useApi, useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../context/notificationProvider';\nimport { assembleMinhaEmpresaForm, assembleMinhaEmpresaQuery } from './minhaEmpresa.helpers';\nimport type { MinhaEmpresaFormValues } from './minhaEmpresa.types';\n\nexport const useMinhaEmpresa = () => {\n const onDadosAtualizadosComSucesso = useMinhaContaStore((state) => state.minhaEmpresa.onDadosAtualizadosComSucesso);\n const { handleErrors, setNotification } = useNotificationContext();\n\n const api = useApi();\n const queryClient = useQueryClient();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n const meusDados = meusDadosQuery.data?.data.data;\n\n const form = useForm<MinhaEmpresaFormValues>({\n async defaultValues() {\n const response = await queryClient.ensureQueryData(api.buscarMeusDados());\n return assembleMinhaEmpresaForm(response.data.data);\n },\n });\n\n useEffect(() => {\n if (meusDados) form.reset(assembleMinhaEmpresaForm(meusDados));\n }, [form.reset, meusDados]);\n\n const atualizarMeusDados = useMutation({\n ...api.atualizarMeusDados(),\n onSuccess(_, body) {\n setNotification({\n title: 'Dados atualizados com sucesso!',\n variant: 'success',\n });\n\n onDadosAtualizadosComSucesso?.(body);\n },\n onError: handleErrors.bind(null),\n });\n\n const handleSubmit: FormEventHandler = useCallback(\n (e) => {\n e.preventDefault();\n e.stopPropagation();\n return form.handleSubmit(async (values) => {\n const body = assembleMinhaEmpresaQuery(values);\n await atualizarMeusDados.mutateAsync(body);\n form.reset(values);\n await meusDadosQuery.refetch();\n })(e);\n },\n [form.handleSubmit, atualizarMeusDados.mutateAsync, form.reset, meusDadosQuery.refetch],\n );\n\n return { form, handleSubmit };\n};\n","import { CircularProgress, Divider, Grid, Paper, useMediaQuery } from '@mui/material';\nimport { memo } from 'react';\nimport { FormProvider } from 'react-hook-form';\nimport { SPaper } from '../../shared/styles';\nimport { DadosEmpresa } from './dadosEmpresa/dadosEmpresa';\nimport { DadosEndereco } from './dadosEndereco/dadosEndereco';\nimport { DadosResponsavel } from './dadosResponsavel/dadosResponsavel';\nimport { Header } from './header/header';\nimport { useMinhaEmpresa } from './useMinhaEmpresa';\n\nfunction MinhaEmpresaComp() {\n const { form, handleSubmit } = useMinhaEmpresa();\n const mobileLayout = useMediaQuery('(max-width: 600px)');\n\n if (form.formState.isLoading)\n return (\n <SPaper centerContent height='75vh'>\n <CircularProgress />\n </SPaper>\n );\n\n return (\n <FormProvider {...form}>\n <form onSubmit={handleSubmit}>\n <Paper\n elevation={2}\n sx={{ borderRadius: mobileLayout ? '0 0 16px 16px' : '0 16px 16px 16px', padding: '1rem' }}\n >\n <Grid container spacing={3}>\n <Grid size={12}>\n <Header />\n </Grid>\n\n <Grid size={12}>\n <Divider />\n </Grid>\n\n <Grid size={12}>\n <DadosEmpresa />\n </Grid>\n\n <Grid size={12}>\n <Divider />\n </Grid>\n\n <Grid size={12}>\n <DadosEndereco />\n </Grid>\n\n <Grid size={12}>\n <Divider />\n </Grid>\n\n <Grid size={12}>\n <DadosResponsavel />\n </Grid>\n </Grid>\n </Paper>\n </form>\n </FormProvider>\n );\n}\n\nexport const MinhaEmpresa = memo(MinhaEmpresaComp);\n\nMinhaEmpresa.displayName = 'MinhaEmpresa';\n","import { useMediaQuery } from '@mui/material';\nimport { useMinhaContaStore } from '../../context/minhaContaProvider';\n\nexport const useMinhaConta = () => {\n const tabAtiva = useMinhaContaStore((state) => state.tabAtiva || 'minhaEmpresa');\n const setTabAtiva = useMinhaContaStore((state) => state.setTabAtiva);\n const esconderTabMeuPlano = useMinhaContaStore((state) => state.esconderTabMeuPlano);\n const fullWidthTabs = useMediaQuery('(max-width:600px)');\n\n return { esconderTabMeuPlano, tabAtiva, setTabAtiva, fullWidthTabs };\n};\n","import { Grid, Tab, Tabs } from '@mui/material';\nimport { MinhaContaProvider } from '../../context/minhaContaProvider';\nimport { MinhaContaQueryProvider } from '../../context/minhaContaQueryProvider';\nimport { NotificationProvider } from '../../context/notificationProvider';\nimport type { NotificationProviderProps } from '../../context/notificationProvider.types';\nimport { MeuPlano } from '../meuPlano/meuPlano';\nimport { MinhaEmpresa } from '../minhaEmpresa/minhaEmpresa';\nimport type { MinhaContaProps } from './minhaConta.types';\nimport { useMinhaConta } from './useMinhaConta';\n\nfunction MinhaContaComp({ onNotification }: Pick<NotificationProviderProps, 'onNotification'>) {\n const { esconderTabMeuPlano, tabAtiva, setTabAtiva, fullWidthTabs } = useMinhaConta();\n\n return (\n <NotificationProvider onNotification={onNotification}>\n <Grid container>\n <Grid size={{ xs: 12, sm: 'auto' }}>\n <Tabs\n variant={fullWidthTabs ? 'fullWidth' : 'standard'}\n value={tabAtiva}\n onChange={(_, value) => setTabAtiva(value)}\n >\n <Tab label='Minha empresa' value='minhaEmpresa' />\n {!esconderTabMeuPlano && <Tab label='Meu plano' value='meuPlano' />}\n </Tabs>\n </Grid>\n\n <Grid size={12}>\n {tabAtiva === 'minhaEmpresa' ? <MinhaEmpresa /> : null}\n {tabAtiva === 'meuPlano' ? <MeuPlano /> : null}\n </Grid>\n </Grid>\n </NotificationProvider>\n );\n}\n\nexport function MinhaConta(props: MinhaContaProps) {\n return (\n <MinhaContaQueryProvider>\n <MinhaContaProvider {...props}>\n <MinhaContaComp onNotification={props.onNotification} />\n </MinhaContaProvider>\n </MinhaContaQueryProvider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/api/index.ts","../src/utils/getPeriodicidadeLabel.ts","../src/components/meuPlanoInfo/components/skeleton.tsx","../src/api/queries.ts","../src/components/loading/loading.tsx","../src/hooks/useToken.ts","../src/store/app/app.static.ts","../src/store/app/useAppStore.tsx","../src/store/minhaConta/minhaConta.static.ts","../src/store/minhaConta/createMinhaContaStore.ts","../src/context/minhaContaProvider.tsx","../src/components/meuPlanoInfo/components/buttonPlanos.tsx","../src/components/meuPlanoInfo/components/detalhes.tsx","../src/components/meuPlanoInfo/meuPlanoInfo.static.ts","../src/components/meuPlanoInfo/useMeuPlanoInfo.ts","../src/components/meuPlanoInfo/meuPlanoInfo.tsx","../src/utils/parseError.ts","../src/context/notificationProvider.tsx","../src/hooks/useDialog.ts","../src/utils/openWhatsapp.ts","../src/components/planosDialog/contratarRecursos/listaRecursos/listaRecursos.styles.ts","../src/components/planosDialog/contratarRecursos/listaRecursos/listaRecursos.tsx","../src/components/planosDialog/contratarRecursos/confirmacaoDialog/useConfirmacaoDialog.ts","../src/components/planosDialog/contratarRecursos/confirmacaoDialog/confirmacaoDialog.tsx","../src/components/planosDialog/contratarRecursos/planoShowcase/planoShowcase.styles.ts","../src/components/planosDialog/contratarRecursos/planoShowcase/usePlanoShowcase.ts","../src/components/planosDialog/contratarRecursos/planoShowcase/planoShowcase.tsx","../src/components/planosDialog/contratarRecursos/contratarRecursos.tsx","../src/components/planosDialog/emptyState/emptyState.tsx","../src/components/planosDialog/listagemPlanos/listagemPlanos.styles.ts","../src/components/planosDialog/listagemPlanos/plano/plano.styles.ts","../src/components/planosDialog/listagemPlanos/plano/plano.tsx","../src/components/planosDialog/listagemPlanos/useListagemPlanos.ts","../src/components/planosDialog/listagemPlanos/listagemPlanos.tsx","../src/components/planosDialog/loading/loading.tsx","../src/components/planosDialog/planosDialog.static.ts","../src/components/planosDialog/usePlanosDialog.ts","../src/components/planosDialog/planosDialog.tsx","../src/components/planosDialog/planosDialogExport.tsx","../src/components/recursosDialog/confirmacaoAdquirirDialog/confirmacaoAdquirirDialog.tsx","../src/components/recursosDialog/confirmacaoRemoverDialog/confirmacaoRemoverDialog.tsx","../src/components/recursosDialog/emptyState/emptyState.tsx","../src/components/recursosDialog/gifDialog/gifDialog.styles.ts","../src/components/recursosDialog/gifDialog/gifDialog.tsx","../src/components/recursosDialog/recurso/recurso.styles.ts","../src/components/recursosDialog/recurso/recurso.tsx","../src/components/recursosDialog/useRecursosDialog.ts","../src/components/recursosDialog/recursosDialog.tsx","../src/components/recursosDialog/recursosDialogExport.tsx","../src/context/minhaContaQueryProvider.tsx","../src/screens/confirmarEmail/api/index.ts","../src/screens/confirmarEmail/confirmarEmail.styles.ts","../src/screens/confirmarEmail/useConfirmarEmail.ts","../src/screens/confirmarEmail/confirmarEmail.tsx","../src/shared/styles.ts","../src/screens/meuPlano/faturas/alterarEmailCobrancaDialog/useAlterarEmailCobrancaDialog.tsx","../src/screens/meuPlano/faturas/alterarEmailCobrancaDialog/alterarEmailCobrancaDialog.tsx","../src/screens/meuPlano/faturas/emptyState/emptyState.tsx","../src/screens/meuPlano/faturas/useFaturas.tsx","../src/helpers/contrateApi/meusDadosApi.types.ts","../src/screens/meuPlano/faturas/useProximaFatura.tsx","../src/screens/meuPlano/faturas/faturas.tsx","../src/screens/meuPlano/termosDeUso/termosDeUso.tsx","../src/screens/meuPlano/useMeuPlano.ts","../src/screens/meuPlano/meuPlano.tsx","../src/screens/minhaEmpresa/dadosEmpresa/dadosEmpresa.styles.ts","../src/screens/minhaEmpresa/dadosEmpresa/useDadosEmpresa.ts","../src/screens/minhaEmpresa/dadosEmpresa/dadosEmpresa.tsx","../src/screens/minhaEmpresa/dadosEndereco/useDadosEndereco.ts","../src/screens/minhaEmpresa/dadosEndereco/dadosEndereco.tsx","../src/screens/minhaEmpresa/dadosResponsavel/dadosResponsavel.tsx","../src/screens/minhaEmpresa/header/useHeader.ts","../src/screens/minhaEmpresa/header/header.tsx","../src/screens/minhaEmpresa/minhaEmpresa.helpers.ts","../src/screens/minhaEmpresa/useMinhaEmpresa.ts","../src/screens/minhaEmpresa/minhaEmpresa.tsx","../src/screens/minhaConta/useMinhaConta.tsx","../src/screens/minhaConta/minhaConta.tsx"],"sourcesContent":["import axios, { type AxiosInstance } from 'axios';\nimport type { BuscarPlanosEGruposPayload, BuscarPlanosEGruposResponse } from '../helpers/contrateApi/contrateApi.types';\nimport type {\n BuscarCepResponse,\n BuscarRntrcResponse,\n PesquisarDadosCidadeResponse,\n} from '../helpers/contrateApi/geralApi.types';\nimport type {\n AlterarPlanoPayload,\n AtualizarEmailsCobrancaBody,\n AtualizarMeusDadosBody,\n BuscarBoletoResponse,\n BuscarMeusDadosResponse,\n BuscarNfseResponse,\n BuscarPlanoPayload,\n BuscarPlanoResponse,\n ItemListarCobrancasResponse,\n MeuPlanoRecursosResponse,\n} from '../helpers/contrateApi/meusDadosApi.types';\nimport type { ApiResponse } from '../helpers/types';\n\nexport class ApiMinhaConta {\n private axiosSistema: AxiosInstance;\n private axiosControle: AxiosInstance;\n private listeners = new Set<() => void>();\n\n constructor(axiosInstance: AxiosInstance) {\n const isStaging = axiosInstance.defaults.baseURL?.includes('staging');\n const baseURL = isStaging\n ? 'https://apistaging-controle.sbsistemas.com.br'\n : 'https://apicontrole.sbsistemas.com.br';\n\n this.axiosControle = axios.create({ ...axiosInstance, baseURL });\n this.axiosSistema = axios.create(axiosInstance.defaults);\n }\n\n setToken(value: string) {\n let bearerToken = value;\n if (!value.startsWith('Bearer ')) {\n bearerToken = `Bearer ${bearerToken}`;\n }\n\n this.axiosSistema.defaults.headers.common.Authorization = bearerToken;\n this.axiosControle.defaults.headers.common.Authorization = bearerToken;\n\n this.notify();\n }\n\n get token(): string {\n return this.axiosSistema.defaults.headers.common.Authorization?.toString().replace('Bearer ', '') ?? '';\n }\n\n // Métodos existentes\n buscarMeusDados() {\n return this.axiosSistema.get<ApiResponse<BuscarMeusDadosResponse>>(`/meus-dados`);\n }\n\n atualizarMeusDados(body: AtualizarMeusDadosBody) {\n return this.axiosSistema.patch(`/meus-dados`, body);\n }\n\n buscarMeuPlanoRecursos() {\n return this.axiosSistema.get<ApiResponse<MeuPlanoRecursosResponse>>(`/meus-dados/meu-plano/recursos`);\n }\n\n contratarRecurso(codigoRecurso: number) {\n return this.axiosSistema.patch(`/meus-dados/plano/contratar-recurso/${codigoRecurso}`);\n }\n\n descontratarRecurso(codigoRecurso: number) {\n return this.axiosSistema.patch(`/meus-dados/plano/descontratar-recurso/${codigoRecurso}`);\n }\n\n buscarPlano(payload: BuscarPlanoPayload) {\n return this.axiosSistema.get<ApiResponse<BuscarPlanoResponse>>(`/meus-dados/plano-buscar/${payload.path.codigo}`, {\n params: payload.params,\n });\n }\n\n contratarPlano(plano: AlterarPlanoPayload) {\n return this.axiosSistema.patch(`/meus-dados/alterar-plano`, plano);\n }\n\n listarCobrancas() {\n return this.axiosSistema.get<ApiResponse<ItemListarCobrancasResponse[]>>(`/meus-dados/cobrancas`);\n }\n\n atualizarEmailCobranca(emails: AtualizarEmailsCobrancaBody) {\n return this.axiosSistema.patch(`/meus-dados/email-cobranca`, emails);\n }\n\n buscarBoleto(identificador: string) {\n return this.axiosSistema.get<ApiResponse<BuscarBoletoResponse>>(\n `/meus-dados/cobrancas/baixar-boleto/${identificador}`,\n );\n }\n\n buscarNfse(identificador: string) {\n return this.axiosSistema.get<ApiResponse<BuscarNfseResponse>>(`/meus-dados/cobrancas/baixar-nfse/${identificador}`);\n }\n\n listarPlanosEGrupos(payload: BuscarPlanosEGruposPayload) {\n const tipoPlano = window.location.hostname.includes('parceiro') ? 1 : 0;\n\n return this.axiosControle.get<ApiResponse<BuscarPlanosEGruposResponse>>('/contrate/planos-e-grupos', {\n params: { ...payload.params, tipoPlano },\n });\n }\n\n buscarRntrc(cnpj: string) {\n return this.axiosSistema.get<ApiResponse<BuscarRntrcResponse>>(`/rntrc?cnpj=${cnpj}`);\n }\n buscarCep(cep: string) {\n return this.axiosSistema.get<ApiResponse<BuscarCepResponse>>(`/cep/${cep}`);\n }\n pesquisarCidades(search: string) {\n return this.axiosSistema.get<ApiResponse<PesquisarDadosCidadeResponse[]>>(`/cidades?search=${search}`);\n }\n\n //// Métodos a ser utilizados com useSyncExternalStore\n subscriber(listener: () => void) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify() {\n this.listeners.forEach((listener) => listener());\n }\n}\n","type Modelo = 'mensalidade' | 'mensais' | 'mes';\n\ninterface GetPeriodicidadeLabelOptions {\n modelo?: Modelo;\n}\n\nconst getPeriodicidadeLabel = (periodicidade: number | null, options?: GetPeriodicidadeLabelOptions) => {\n const modelo = options?.modelo || 'mes';\n const _periodicidade = periodicidade ?? 0;\n\n const modelos: Record<Modelo, Record<number, string>> = {\n mes: { 0: 'mês', 1: 'tri', 2: 'sem', 3: 'ano' },\n mensais: { 0: 'mensais', 1: 'trimestrais', 2: 'semestrais', 3: 'anuais' },\n mensalidade: { 0: 'mensalidade', 1: 'trimestralidade', 2: 'semestralidade', 3: 'anualidade' },\n };\n\n return modelos[modelo][_periodicidade];\n};\n\nexport default getPeriodicidadeLabel;\n","import { Paper, Skeleton } from '@mui/material';\nimport { Grid } from '@mui/system';\n\nexport function MeuPlanoInfoSkeleton() {\n return (\n <Paper elevation={1} sx={{ padding: '1.5rem' }}>\n <Grid container spacing={1} sx={{\n justifyContent: 'center'\n }}>\n <Grid size={12}>\n <Skeleton height='1.3rem' style={{ transform: 'none' }} />\n </Grid>\n <Grid size={12} sx={{\n marginTop: '0.5rem'\n }}>\n <Skeleton height='3.5rem' style={{ transform: 'none' }} />\n </Grid>\n <Grid size={12} sx={{\n marginY: '1rem'\n }}>\n <Skeleton height='0.8rem' sx={{ transform: 'none' }} />\n <Skeleton height='0.8rem' sx={{ transform: 'none', marginY: '0.5rem' }} />\n <Skeleton height='0.8rem' sx={{ transform: 'none' }} />\n </Grid>\n <Grid size={6}>\n <Skeleton height='2rem' style={{ transform: 'none' }} />\n </Grid>\n <Grid size={6}>\n <Skeleton height='2rem' style={{ transform: 'none' }} />\n </Grid>\n </Grid>\n </Paper>\n );\n}\n","import { mutationOptions, queryOptions } from '@tanstack/react-query';\n\nimport type { BuscarPlanosEGruposPayload } from '../helpers/contrateApi/contrateApi.types';\nimport type {\n AlterarPlanoPayload,\n AtualizarEmailsCobrancaBody,\n AtualizarMeusDadosBody,\n BuscarPlanoPayload,\n} from '../helpers/contrateApi/meusDadosApi.types';\nimport type { ApiMinhaConta } from '.';\n\nconst queryKeys = {\n all: ['minha-conta'],\n buscarMeusDados() {\n return [...this.all, 'meus-dados'] as const;\n },\n buscarMeuPlanoRecursos() {\n return [...this.all, 'meu-plano'] as const;\n },\n buscarPlano(payload: BuscarPlanoPayload) {\n return [...this.all, 'plano', payload] as const;\n },\n listarCobrancas() {\n return [...this.buscarMeuPlanoRecursos(), 'cobrancas'] as const;\n },\n buscarBoleto(identificador: string) {\n return [...this.listarCobrancas(), 'boleto', identificador] as const;\n },\n buscarNfse(identificador: string) {\n return [...this.listarCobrancas(), 'Nfse', identificador] as const;\n },\n listarPlanosEGrupos(payload: BuscarPlanosEGruposPayload) {\n return [...this.all, 'listar-planos-e-grupos', payload];\n },\n\n buscarRntrc(cnpj: string) {\n return [...this.all, 'buscar-rntrc', cnpj];\n },\n buscarCep(cep: string) {\n return [...this.all, 'buscar-cep', cep];\n },\n pesquisarCidades(search: string) {\n return [...this.all, 'pesquisar-cidades', search];\n },\n} as const;\n\nexport const generateQueries = (endpoint: ApiMinhaConta) => {\n return {\n buscarMeusDados: () =>\n queryOptions({\n queryKey: queryKeys.buscarMeusDados(),\n queryFn: () => endpoint.buscarMeusDados(),\n }),\n buscarMeuPlanoRecursos: () =>\n queryOptions({\n queryKey: queryKeys.buscarMeuPlanoRecursos(),\n queryFn: () => endpoint.buscarMeuPlanoRecursos(),\n }),\n buscarPlano: (payload: BuscarPlanoPayload) =>\n queryOptions({\n queryKey: queryKeys.buscarPlano(payload),\n queryFn: () => endpoint.buscarPlano(payload),\n }),\n listarCobrancas: () =>\n queryOptions({\n queryKey: queryKeys.listarCobrancas(),\n queryFn: () => endpoint.listarCobrancas(),\n }),\n buscarBoleto: (identificador: string) =>\n queryOptions({\n queryKey: queryKeys.buscarBoleto(identificador),\n queryFn: () => endpoint.buscarBoleto(identificador),\n }),\n buscarNfse: (identificador: string) =>\n queryOptions({\n queryKey: queryKeys.buscarNfse(identificador),\n queryFn: () => endpoint.buscarNfse(identificador),\n }),\n listarPlanosEGrupos: (payload: BuscarPlanosEGruposPayload) =>\n queryOptions({\n queryKey: queryKeys.listarPlanosEGrupos(payload),\n queryFn: () => endpoint.listarPlanosEGrupos(payload),\n }),\n buscarRntrc: (cnpj: string) =>\n queryOptions({\n queryKey: queryKeys.buscarRntrc(cnpj),\n queryFn: () => endpoint.buscarRntrc(cnpj),\n }),\n buscarCep: (cep: string) =>\n queryOptions({\n queryKey: queryKeys.buscarCep(cep),\n queryFn: () => endpoint.buscarCep(cep),\n }),\n pesquisarCidades: (search: string) =>\n queryOptions({\n queryKey: queryKeys.pesquisarCidades(search),\n queryFn: () => endpoint.pesquisarCidades(search),\n }),\n } as const;\n};\n\nexport const generateMutations = (endpoint: ApiMinhaConta) => {\n return {\n atualizarMeusDados: () =>\n mutationOptions({\n mutationFn: (body: AtualizarMeusDadosBody) => endpoint.atualizarMeusDados(body),\n }),\n contratarRecurso: () =>\n mutationOptions({\n mutationFn: (codigoRecurso: number) => endpoint.contratarRecurso(codigoRecurso),\n }),\n descontratarRecurso: () =>\n mutationOptions({\n mutationFn: (codigoRecurso: number) => endpoint.descontratarRecurso(codigoRecurso),\n }),\n contratarPlano: () =>\n mutationOptions({\n mutationFn: (body: AlterarPlanoPayload) => endpoint.contratarPlano(body),\n }),\n atualizarEmailCobrancas: () =>\n mutationOptions({\n mutationFn: (emails: AtualizarEmailsCobrancaBody) =>\n endpoint.atualizarEmailCobranca(emails),\n }),\n } as const;\n};\n","import { Backdrop, CircularProgress } from '@mui/material';\n\nfunction Loading({ show }: { show: boolean }) {\n return (\n <Backdrop open={show} style={{ zIndex: 10000 }}>\n <CircularProgress size={50} sx={{ color: (theme) => theme.palette.primary.main }} />\n </Backdrop>\n );\n}\n\nexport default Loading;\n","import { useSyncExternalStore } from 'react';\nimport type { ApiMinhaConta } from '../api';\n\nexport const useToken = (api: ApiMinhaConta) =>\n useSyncExternalStore(\n (listener) => api.subscriber(listener),\n () => api.token,\n );\n","import type { AppStoreState } from './app.types';\n\nexport const appStoreInitialState: AppStoreState = {\n loading: false,\n};\n","import { create } from 'zustand';\n\nimport { appStoreInitialState } from './app.static';\nimport type { AppStore } from './app.types';\n\nexport const useAppStore = create<AppStore>((setState) => ({\n ...appStoreInitialState,\n setLoading: (loading) => setState({ loading }),\n resetState: () => setState(appStoreInitialState),\n}));\n","import type { MinhaContaStoreState } from './minhaConta.types';\n\nexport const minhaContaStoreInitialState: MinhaContaStoreState = {\n tabAtiva: 'minhaEmpresa',\n sistemaNome: '',\n telefoneSuporte: '',\n telefoneCS: '',\n minhaEmpresa: {},\n meuPlano: {},\n recursosDialog: {},\n planosDialog: {},\n};\n","import { create, createStore } from 'zustand';\n\nimport { minhaContaStoreInitialState } from './minhaConta.static';\nimport type { MinhaContaStore } from './minhaConta.types';\nimport type { MinhaContaStoreState } from './minhaConta.types';\n\nexport const createMinhaContaStore = (initialValues?: Partial<MinhaContaStoreState>) =>\n createStore<MinhaContaStore>()((setState) => ({\n ...minhaContaStoreInitialState,\n ...initialValues,\n setTabAtiva: (tabAtiva) => setState({ tabAtiva }),\n }));\n","import { useQueryClient } from '@tanstack/react-query';\nimport { jwtDecode } from 'jwt-decode';\nimport { createContext, type PropsWithChildren, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { createStore, type StoreApi, useStore } from 'zustand';\nimport { generateMutations, generateQueries } from '../api/queries';\nimport Loading from '../components/loading/loading';\nimport { useToken } from '../hooks/useToken';\nimport type { MinhaContaProps, MinhaContaSlotProps } from '../screens/minhaConta/minhaConta.types';\nimport { useAppStore } from '../store/app/useAppStore';\nimport { createMinhaContaStore } from '../store/minhaConta/createMinhaContaStore';\nimport type { MinhaContaStore, MinhaContaStoreState } from '../store/minhaConta/minhaConta.types';\n\nexport type MinhaContaProviderProps = Partial<Omit<MinhaContaStoreState, 'ready' | 'usuario'>> &\n Pick<MinhaContaProps, 'slotProps' | 'api'>;\nconst MinhaContaContext = createContext<{\n storeMinhaConta: StoreApi<MinhaContaStore>;\n storeSlotProps: StoreApi<MinhaContaSlotProps>;\n api: ReturnType<typeof generateQueries> & ReturnType<typeof generateMutations>;\n} | null>(null);\n\nconst getUsuario = (token: string) => {\n try {\n return jwtDecode<{ email: string }>(token);\n } catch (_) {\n return undefined;\n }\n};\n\nexport function MinhaContaProvider(props: PropsWithChildren<MinhaContaProviderProps>) {\n const loading = useAppStore((state) => state.loading);\n const token = useToken(props.api);\n const queryClient = useQueryClient();\n\n /**\n * Declara os stores, em states, assim, quando o componente é desmontado, o store deixa de existir, pois ele é local, e não global\n *\n * Caso queira estudar um pouco sobre:\n * @link https://tkdodo.eu/blog/zustand-and-react-context\n */\n const [storeSlotProps] = useState(() => createStore<MinhaContaSlotProps>(() => props.slotProps ?? {}));\n const [storeMinhaConta] = useState(() => createMinhaContaStore({ ...props, usuario: getUsuario(token) }));\n const [api] = useState(() => {\n return {\n ...generateQueries(props.api),\n ...generateMutations(props.api),\n } as const;\n });\n const clearQueriesCacheOnTokenChange = useCallback(() => {\n storeMinhaConta.setState({ usuario: getUsuario(props.api.token) });\n queryClient.resetQueries();\n }, [props.api.token, queryClient.resetQueries, storeMinhaConta.setState]);\n\n useEffect(() => {\n props.api.subscriber(clearQueriesCacheOnTokenChange);\n }, [props.api.subscriber, clearQueriesCacheOnTokenChange]);\n\n const contextValues = useMemo(\n () => ({\n storeMinhaConta,\n storeSlotProps,\n api,\n }),\n [api, storeMinhaConta, storeSlotProps],\n );\n\n return (\n <MinhaContaContext.Provider value={contextValues}>\n {props.children}\n <Loading show={loading} />\n </MinhaContaContext.Provider>\n );\n}\n\n/**\n * possuí hooks separados para melhor performance em renders\n * Cada hook acessa uma store local do context\n */\nexport function useMinhaContaStore<T>(selector: (p: MinhaContaStore) => T) {\n const context = useContext(MinhaContaContext);\n\n if (context === null) {\n throw new Error('useMinhaContaStore deve ser utilizado dentro de um MinhaContaProvider');\n }\n\n return useStore(context.storeMinhaConta, selector);\n}\n\nexport function useSlotPropsStore<T>(selector: (p: MinhaContaSlotProps) => T) {\n const context = useContext(MinhaContaContext);\n\n if (context === null) {\n throw new Error('useSlotProps deve ser utilizado dentro de um MinhaContaProvider');\n }\n return useStore(context.storeSlotProps, selector);\n}\n\nexport function useApi() {\n const ctx = useContext(MinhaContaContext);\n\n if (ctx === null) {\n throw new Error('useApi deve ser utilizado dentro de um MinhaContaProvider');\n }\n return ctx.api;\n}\n","import { Button, type ButtonProps } from '@mui/material';\n\nexport function ButtonPlanos(props: ButtonProps) {\n return <Button {...props}>Ver planos</Button>;\n}\n\nexport function ButtonLojaRecursos(props: ButtonProps) {\n return <Button {...props}>Loja de recursos</Button>;\n}\n","import { valor as valorMask } from '@s_mart/masks';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Typography } from '@mui/material';\n\nimport type {\n IMeuPlanoRecurso,\n MeuPlanoRecursosResponse,\n} from '../../../helpers/contrateApi/meusDadosApi.types';\n\ntype ItemRecursoProps = { recurso: IMeuPlanoRecurso };\nexport function DetalhesItemRecurso({ recurso }: ItemRecursoProps) {\n return (\n <div\n key={recurso.codigoRecurso}\n style={{ display: 'flex', justifyContent: 'space-between', marginTop: '0.2rem' }}\n >\n <Typography variant='bodySM' sx={{ color: colorPalette.neutral[100] }}>\n {recurso.nomeRecurso}\n </Typography>\n <Typography variant='titleXS' sx={{ color: colorPalette.neutral[100] }}>\n {valorMask.format(recurso.valorRecurso ?? 0)}\n </Typography>\n </div>\n );\n}\n\ntype DetalhesItemPlanoProps = { meuPlano?: MeuPlanoRecursosResponse };\nexport function DetalhesItemPlano({ meuPlano }: DetalhesItemPlanoProps) {\n return (\n <div style={{ display: 'flex', justifyContent: 'space-between', marginTop: '0.2rem' }}>\n <Typography variant='bodySM' sx={{ color: colorPalette.neutral[100] }}>\n {meuPlano?.nomePlano}\n </Typography>\n <Typography variant='titleXS' sx={{ color: colorPalette.neutral[100] }}>\n {valorMask.format(meuPlano?.valor ?? 0)}\n </Typography>\n </div>\n );\n}\n","import { ButtonLojaRecursos, ButtonPlanos } from './components/buttonPlanos';\nimport { DetalhesItemPlano, DetalhesItemRecurso } from './components/detalhes';\nimport type { MeuPlanoInfoSlots } from './meuPlanoInfo.types';\n\nexport const DEFAULT_SLOTS: MeuPlanoInfoSlots = {\n DetalhesItemRecurso,\n DetalhesItemPlano,\n ButtonPlanos,\n ButtonLojaRecursos,\n};\n","import { useMediaQuery } from '@mui/system';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useApi } from '../../context/minhaContaProvider';\nimport { DEFAULT_SLOTS } from './meuPlanoInfo.static';\nimport type { MeuPlanoInfoProps } from './meuPlanoInfo.types';\n\nexport function useMeuPlanoInfo(props: MeuPlanoInfoProps) {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const cobrancasQuery = useQuery({\n ...api.listarCobrancas(),\n select(data) {\n return data.data.data.some((i) => i.situacao === 'EMITIDO');\n },\n });\n\n const slots = useMemo(() => ({ ...DEFAULT_SLOTS, ...props.slots }), [props.slots]);\n\n const meuPlano = meuPlanoQuery.data?.data.data;\n const cobrancaEmitida = Boolean(cobrancasQuery.data);\n\n const maxWidth400 = useMediaQuery('(max-width: 400px)');\n\n const valorTotalPlano = useMemo(() => {\n const valorPlano = meuPlano?.valor ?? 0;\n const valorRecursos =\n meuPlano?.recursos\n ?.filter((recurso) => recurso.recursoContratado)\n .reduce((total, curr) => total + curr.valorRecurso, 0) ?? 0;\n\n return valorPlano + valorRecursos;\n }, [meuPlano?.valor, meuPlano?.recursos]);\n\n const recursosContratados = meuPlano?.recursos\n ?.filter((recurso) => recurso.recursoContratado)\n .sort((a, b) => a.valorRecurso - b.valorRecurso);\n\n return {\n meuPlanoQuery,\n meuPlano,\n cobrancaEmitida,\n valorTotalPlano,\n recursosContratados,\n slots,\n maxWidth400,\n };\n}\n","import { Card, Grid, Typography } from '@mui/material';\nimport { LIcon } from '@s_mart/core';\nimport { decimal as decimalMask } from '@s_mart/masks';\nimport { lineShoppingCard, lineStar } from '@s_mart/solid-icons';\nimport getPeriodicidadeLabel from '../../utils/getPeriodicidadeLabel';\nimport { MeuPlanoInfoSkeleton } from './components/skeleton';\nimport type { MeuPlanoInfoProps } from './meuPlanoInfo.types';\nimport { useMeuPlanoInfo } from './useMeuPlanoInfo';\n\nexport function MeuPlanoInfo(props: MeuPlanoInfoProps) {\n const { cobrancaEmitida, maxWidth400, meuPlanoQuery, meuPlano, recursosContratados, slots, valorTotalPlano } =\n useMeuPlanoInfo(props);\n\n if (meuPlanoQuery.isFetching) {\n return <MeuPlanoInfoSkeleton />;\n }\n\n return (\n <>\n <Card elevation={2} sx={{ padding: '1rem' }}>\n <Grid container>\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleSM'>{meuPlano?.recursos ? 'Valor Total' : 'Valor do plano'}</Typography>\n </Grid>\n\n <Grid size={12} sx={{ display: 'flex', justifyContent: 'center', alignItems: 'end' }}>\n <Typography variant='titleXXS' sx={{\n alignSelf: 'center'\n }}>\n R$\n </Typography>\n <Typography variant='titleXL' style={{ fontSize: '3rem' }}>\n {decimalMask.format(valorTotalPlano)}\n </Typography>\n <Typography variant='titleMD' sx={{\n marginBottom: '0.3rem'\n }}>\n /{getPeriodicidadeLabel(meuPlano?.periodicidade ?? null)}\n </Typography>\n </Grid>\n\n <Grid size={12} sx={{\n marginTop: '2rem'\n }}>\n <slots.DetalhesItemPlano meuPlano={meuPlano} />\n\n {recursosContratados?.map((recurso) => (\n <slots.DetalhesItemRecurso recurso={recurso} key={recurso.codigoRecurso} />\n ))}\n </Grid>\n\n <Grid\n size={12}\n sx={{\n display: 'flex',\n flexDirection: maxWidth400 ? 'column' : 'row',\n justifyContent: 'space-between',\n gap: '0.5rem',\n marginTop: '2rem',\n }}\n >\n {props.exibirPlanos && (\n <slots.ButtonPlanos\n variant={cobrancaEmitida ? 'neutral' : 'contained'}\n startIcon={<LIcon icon={lineStar} removeMargin />}\n fullWidth={maxWidth400 || !props.exibirLojaRecursos}\n onClick={props.onClickButtonPlanos}\n />\n )}\n {props.exibirLojaRecursos && (\n <slots.ButtonLojaRecursos\n variant={cobrancaEmitida ? 'neutral' : 'outlined'}\n disabled={!meuPlano?.recursos}\n startIcon={<LIcon icon={lineShoppingCard} removeMargin />}\n fullWidth={maxWidth400 || !props.exibirPlanos}\n onClick={props.onClickButtonLojaRecursos}\n />\n )}\n </Grid>\n </Grid>\n </Card>\n </>\n );\n}\n","const parseError = (error: any) => {\n let err: string[] = [];\n\n if (typeof error !== 'object') return err;\n\n if (Array.isArray(error) && typeof error[0] === 'string') err = error;\n else if (Array.isArray(error.errors)) err = error.errors;\n else if (typeof error.errors === 'string') err = [error.errors];\n else if (typeof error.error === 'string') err = [error.error];\n else if (typeof error.erro === 'string') err = [error.erro];\n else if (error.erro?.mensagem) err = [error.erro.mensagem];\n else if (typeof error.message === 'string') err = [error.message];\n else if (typeof error.mensagem === 'string') err = [error.mensagem];\n else if (typeof error.authErrors?.[0] === 'string') err = error.authErrors;\n\n return err;\n};\n\nexport default parseError;\n","import { useContext, createContext } from 'react';\nimport type { NotificationContextValues, NotificationProviderProps } from './notificationProvider.types';\nimport parseError from '../utils/parseError';\n\nconst NotificationContext = createContext<NotificationContextValues | null>(null);\n\nexport const NotificationProvider = ({ onNotification: setNotification, children }: NotificationProviderProps) => {\n const handleErrors = (error: unknown) => {\n const parsedError = parseError(error);\n console.error(error);\n setNotification({\n variant: 'error',\n title: parsedError[0],\n });\n };\n\n return (\n <NotificationContext.Provider\n value={{\n setNotification,\n handleErrors,\n }}\n >\n {children}\n </NotificationContext.Provider>\n );\n};\n\nexport const useNotificationContext = () => {\n const context = useContext(NotificationContext);\n\n if (context === null) {\n throw new Error('Hook `useMinhaContaContext` must be used inside a MinhaContaProvider');\n }\n\n return context;\n};\n","import { useState } from 'react';\n\n// Usado para fazer a transição ao abrir e fechar a dialog sem precisar passar o open no componente e não deixar o componente renderizado quando fechado\nexport const useDialog = (onClose: () => void) => {\n const [open, setOpen] = useState(true);\n\n const onCloseDialog = () => {\n setOpen(false);\n\n setTimeout(() => onClose(), 100);\n };\n\n return { open, onCloseDialog };\n};\n","const openWhatsapp = (telefone: string) => {\n const api = `https://api.whatsapp.com/send?phone=${telefone}`;\n\n window.open(api, '_blank', 'noopener noreferrer');\n};\n\nexport default openWhatsapp;\n","import { Grid, type GridProps, styled } from '@mui/material';\nimport type { FC } from 'react';\n\n// FC foi uma Tentativa de resolver erro de tipagem quando o vite carrega a modal de ver planos\nexport const SListTitleWrapper: FC<GridProps> = styled(Grid)`\n display: flex;\n justify-content: end;\n margin-bottom: 1.5rem;\n margin-right: 0.5rem;\n`;\n\n// FC foi uma Tentativa de resolver erro de tipagem quando o vite carrega a modal de ver planos\nexport const SListWrapper: FC<GridProps> = styled(Grid)`\n @media (min-height: 800px) {\n max-height: 50vh;\n overflow-y: auto;\n }\n\n @media (max-width: 960px) {\n max-height: fit-content;\n }\n`;\n// FC foi uma Tentativa de resolver erro de tipagem quando o vite carrega a modal de ver planos\nexport const SListItem: FC<GridProps> = styled(Grid)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid #eeeeee;\n border-radius: 8px;\n padding: 1rem 0 1rem 1rem;\n margin-bottom: 1rem;\n\n @media ((min-height: 800px) or (max-width: 960px)) {\n margin-right: 0.5rem;\n }\n`;\n","import { Switch } from '@s_mart/form';\nimport { valor as valorMask } from '@s_mart/masks';\n\nimport { Grid, Typography } from '@mui/material';\nimport { useFormContext } from 'react-hook-form';\n\nimport type { PlanosDialogFormValues } from '../../planosDialog.types';\nimport { SListItem, SListTitleWrapper, SListWrapper } from './listaRecursos.styles';\n\nexport function ListaRecursos() {\n const { getValues } = useFormContext<PlanosDialogFormValues>();\n\n const planoSelecionadoRecursos = getValues('planoSelecionado.recursos');\n\n const _recursosDisponiveis = planoSelecionadoRecursos?.filter(\n (recurso) => !!recurso.valorRecurso,\n );\n\n if (!_recursosDisponiveis?.length) return null;\n\n return (\n <Grid container>\n <SListTitleWrapper size={12}>\n <Typography variant='titleSM'>Confira os recursos em seu novo plano</Typography>\n </SListTitleWrapper>\n\n <SListWrapper size={12}>\n {_recursosDisponiveis.map((recurso) => (\n <SListItem size={12} key={recurso.codigoRecurso}>\n <Typography variant='titleXS'>\n {recurso.nomeRecurso} ({valorMask.format(recurso.valorRecurso)})\n </Typography>\n\n <Switch\n name={`recursosSelecionados.${recurso.slugRecurso}`}\n label={<Typography variant='titleXXS'>Adicionar</Typography>}\n />\n </SListItem>\n ))}\n </SListWrapper>\n </Grid>\n );\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { useCallback, useMemo } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useApi, useMinhaContaStore } from '../../../../context/minhaContaProvider';\nimport type { IPlanoRecurso } from '../../../../helpers/contrateApi/meusDadosApi.types';\nimport type { PlanosDialogFormValues } from '../../planosDialog.types';\n\nconst useConfirmacaoDialog = () => {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n\n const valorPlanoAtual = meuPlano?.valor;\n const tipoCobrancaPlanoAtual = meuPlano?.tipoCobranca;\n const periodicidadePlanoAtual = meuPlano?.periodicidade;\n const nomePlanoPlanoAtual = meuPlano?.nomePlano;\n\n const getValorTotalPlano = useCallback(() => {\n const valorPlano = meuPlano?.valor ?? 0;\n const valorRecursos =\n meuPlano?.recursos\n ?.filter((recurso) => recurso.recursoContratado)\n .reduce((total, curr) => total + curr.valorRecurso, 0) ?? 0;\n\n return valorPlano + valorRecursos;\n }, [meuPlano?.recursos?.filter, meuPlano?.valor]);\n\n const imagensAlterarPlano = useMinhaContaStore((state) => state.planosDialog.imagensAlterarPlano);\n\n const { getValues } = useFormContext<PlanosDialogFormValues>();\n const planoSelecionado = getValues('planoSelecionado');\n const recursosSelecionados = getValues('recursosSelecionados');\n\n const valorTotal = useMemo(() => {\n const recursos: IPlanoRecurso[] = [];\n\n if (planoSelecionado?.recursos && recursosSelecionados) {\n Object.entries(recursosSelecionados).forEach(([key, value]) => {\n if (value) {\n const _recurso = planoSelecionado.recursos.find((it) => it.slugRecurso === key);\n\n if (_recurso) recursos.push(_recurso);\n }\n });\n }\n\n const valorInicial = planoSelecionado?.valorPeriodicoPromocional || planoSelecionado?.valorPeriodico || 0;\n\n const valor = recursos.reduce((total, curr) => total + curr.valorRecurso, valorInicial);\n\n return valor;\n }, [planoSelecionado, recursosSelecionados]);\n\n const dynamicText = useMemo(() => {\n if (planoSelecionado?.periodicidade !== periodicidadePlanoAtual) {\n return {\n title: 'Contratar',\n buttonLabel: 'Confirmar contratação de plano',\n img: imagensAlterarPlano?.contratar,\n };\n }\n\n if (valorTotal > getValorTotalPlano()) {\n return {\n title: 'Melhorar',\n buttonLabel: 'Confirmar alteração de plano',\n img: imagensAlterarPlano?.melhorar,\n };\n } else {\n return {\n title: 'Diminuir',\n buttonLabel: 'Confirmar alteração de plano',\n img: imagensAlterarPlano?.diminuir,\n };\n }\n }, [valorTotal, imagensAlterarPlano, getValorTotalPlano, planoSelecionado, periodicidadePlanoAtual]);\n\n const mudouTipoCobranca = useMemo(() => {\n const valorPlanoSelecionado = planoSelecionado?.valorPeriodicoPromocional || planoSelecionado?.valorPeriodico;\n\n if (\n valorPlanoAtual &&\n valorPlanoSelecionado &&\n tipoCobrancaPlanoAtual &&\n planoSelecionado.tipoDeCobranca &&\n tipoCobrancaPlanoAtual !== planoSelecionado.tipoDeCobranca\n ) {\n return {\n de: tipoCobrancaPlanoAtual === 2 ? 'pós-pago' : 'pré-pago',\n para: planoSelecionado.tipoDeCobranca === 2 ? 'pós-pago' : 'pré-pago',\n };\n } else {\n return null;\n }\n }, [valorPlanoAtual, tipoCobrancaPlanoAtual, planoSelecionado]);\n\n return { valorTotal, mudouTipoCobranca, dynamicText, nomePlanoPlanoAtual, planoSelecionado };\n};\n\nexport default useConfirmacaoDialog;\n","import { Dialog } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\n\nimport { Button, Grid, Typography } from '@mui/material';\n\nimport { useDialog } from '../../../../hooks/useDialog';\nimport getPeriodicidadeLabel from '../../../../utils/getPeriodicidadeLabel';\nimport useConfirmacaoDialog from './useConfirmacaoDialog';\n\ninterface ConfirmacaoDialogProps {\n onClose: () => void;\n}\n\nexport function ConfirmacaoDialog({ onClose }: ConfirmacaoDialogProps) {\n const { mudouTipoCobranca, dynamicText, valorTotal, nomePlanoPlanoAtual, planoSelecionado } =\n useConfirmacaoDialog();\n const { open, onCloseDialog } = useDialog(onClose);\n\n return (\n <Dialog open={open} onClose={onCloseDialog} maxWidth='xs' fullWidth closeIcon disablePortal>\n <Dialog.Header>{dynamicText.title} plano</Dialog.Header>\n\n <Dialog.Content>\n <Grid container spacing={2}>\n <Grid size={12} sx={{ display: 'flex' }}>\n <Typography variant='bodySM'>\n {mudouTipoCobranca ? (\n <>\n Você está alterando seu plano <strong>{nomePlanoPlanoAtual}</strong> para uma nova\n modalidade:{' '}\n <strong style={{ textTransform: 'capitalize' }}>{mudouTipoCobranca.para}</strong>\n </>\n ) : (\n <>\n Você está alterando seu plano para <strong>{planoSelecionado?.nome}</strong>. O\n boleto será enviado por email em até 2 dias úteis.\n </>\n )}\n <br />\n <br />\n {mudouTipoCobranca && (\n <>\n A forma de pagamento será alterada de {mudouTipoCobranca.de} para{' '}\n {mudouTipoCobranca.para}. O <strong>boleto será enviado por email</strong> em até\n 2 dias úteis, com data de vencimento de até 5 dias.\n <br />\n </>\n )}\n Ao confirmar sua nova escolha, sua fatura será alterada para{' '}\n <strong>\n {valorMask.format(valorTotal)}{' '}\n {getPeriodicidadeLabel(planoSelecionado?.periodicidade ?? 0, { modelo: 'mensais' })}\n </strong>\n .\n </Typography>\n </Grid>\n\n <Grid\n size={12}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {!!dynamicText.img && <img src={dynamicText.img} alt={dynamicText.title} />}\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button variant='neutral' onClick={onCloseDialog}>\n Cancelar\n </Button>\n\n <Button type='submit' onClick={onCloseDialog}>\n {dynamicText.buttonLabel}\n </Button>\n </Dialog.Footer>\n </Dialog>\n );\n}\n","import { styled } from '@mui/material';\nimport { Grid } from '@mui/material';\n\nexport const SContainer = styled(Grid)`\n width: 90%;\n border-radius: 16px;\n padding: 1.5rem;\n margin: 0.5rem 0;\n box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.12);\n\n @media ((min-width: 960px) and (max-height: 800px)) {\n position: sticky;\n top: 0;\n }\n\n @media (max-width: 500px) {\n width: 100%;\n padding: 1rem;\n margin: 0.5rem;\n }\n`;\n\nexport const STitleWrapper = styled(Grid)`\n display: flex;\n justify-content: center;\n margin-bottom: 0.5rem;\n`;\n\nexport const SRecursoListItem = styled('div')`\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.3rem;\n`;\n","import { useFormContext } from 'react-hook-form';\n\nimport type { IPlanoRecurso } from '../../../../helpers/contrateApi/meusDadosApi.types';\nimport type { PlanosDialogFormValues } from '../../planosDialog.types';\n\nconst usePlanoShowcase = () => {\n const { watch, getValues } = useFormContext<PlanosDialogFormValues>();\n\n // biome-ignore lint/style/noNonNullAssertion: É esperado que já esteja selecionado o plano ...\n const planoSelecionado = getValues('planoSelecionado')!;\n const recursosSelecionados = watch('recursosSelecionados');\n\n const getRecursos = () => {\n let recursos: IPlanoRecurso[] = [];\n\n // Recursos inclusos\n if (planoSelecionado.recursos) recursos = planoSelecionado.recursos.filter((it) => !it.valorRecurso);\n\n Object.entries(recursosSelecionados || {}).forEach(([key, value]) => {\n if (value) {\n const _recurso = planoSelecionado.recursos?.find((it) => it.slugRecurso === key);\n\n if (_recurso) recursos.push(_recurso);\n }\n });\n\n return recursos;\n };\n\n const getValorTotal = (somenteRecursos?: boolean) => {\n const _recursos = getRecursos();\n const valorInicial = somenteRecursos\n ? 0\n : planoSelecionado.valorPeriodicoPromocional || planoSelecionado.valorPeriodico;\n\n const valor = _recursos.reduce((total, curr) => total + curr.valorRecurso, valorInicial);\n\n return valor;\n };\n\n return { getValorTotal, getRecursos, planoSelecionado };\n};\n\nexport default usePlanoShowcase;\n","import { useState } from 'react';\n\nimport { valor as valorMask } from '@s_mart/masks';\n\nimport { Button, Grid, Typography } from '@mui/material';\n\nimport getPeriodicidadeLabel from '../../../../utils/getPeriodicidadeLabel';\nimport { ConfirmacaoDialog } from '../confirmacaoDialog/confirmacaoDialog';\nimport { SContainer, SRecursoListItem, STitleWrapper } from './planoShowcase.styles';\nimport usePlanoShowcase from './usePlanoShowcase';\n\nexport function PlanoShowcase() {\n const [openedConfirmacao, setOpenedConfirmacao] = useState(false);\n const { planoSelecionado, getRecursos, getValorTotal } = usePlanoShowcase();\n\n return (\n <>\n <SContainer container>\n <STitleWrapper size={12} style={{ marginBottom: '1.5rem' }}>\n <Typography variant='titleMD' align='center'>\n {planoSelecionado.nome}\n </Typography>\n </STitleWrapper>\n\n <STitleWrapper size={12}>\n <Typography variant='titleSM'>Valor do plano</Typography>\n </STitleWrapper>\n\n <STitleWrapper size={12}>\n <Typography variant='bodyLG' style={{ alignSelf: 'center' }}>\n R$\n </Typography>\n <Typography variant='titleXXL'>{Number(getValorTotal().toFixed(2))}</Typography>\n <Typography variant='bodyLG' style={{ alignSelf: 'end' }}>\n /{getPeriodicidadeLabel(planoSelecionado.periodicidade)}\n </Typography>\n </STitleWrapper>\n\n <Grid size={12} style={{ marginBottom: '1rem' }}>\n <Button size='large' fullWidth onClick={() => setOpenedConfirmacao(true)}>\n Contratar agora\n </Button>\n </Grid>\n\n <Grid size={12}>\n <SRecursoListItem>\n <Typography variant='bodyMD'>{planoSelecionado.nome}</Typography>\n <Typography variant='bodyMD'>\n {valorMask.format(\n planoSelecionado.valorPeriodicoPromocional || planoSelecionado.valorPeriodico,\n )}\n </Typography>\n </SRecursoListItem>\n\n <SRecursoListItem>\n <Typography variant='bodySM'>Subtotal recursos</Typography>\n <Typography variant='bodySM'>{valorMask.format(getValorTotal(true))}</Typography>\n </SRecursoListItem>\n\n {getRecursos().map((rec) => (\n <SRecursoListItem key={rec.codigoRecurso}>\n <Typography variant='bodySM'>{rec.nomeRecurso}</Typography>\n <Typography variant='bodySM'>{valorMask.format(rec.valorRecurso)}</Typography>\n </SRecursoListItem>\n ))}\n </Grid>\n </SContainer>\n\n {openedConfirmacao && <ConfirmacaoDialog onClose={() => setOpenedConfirmacao(false)} />}\n </>\n );\n}\n","import { Grid } from '@mui/material';\nimport { ListaRecursos } from './listaRecursos/listaRecursos';\nimport { PlanoShowcase } from './planoShowcase/planoShowcase';\n\nexport function ContratarRecursos() {\n return (\n <Grid container spacing={2}>\n <Grid size={{ xs: 12, md: 7 }}>\n <ListaRecursos />\n </Grid>\n\n <Grid\n size={{\n xs: 12,\n md: 5,\n }}\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'start',\n }}\n >\n <PlanoShowcase />\n </Grid>\n </Grid>\n );\n}\n","import { Grid, Typography } from '@mui/material';\nimport { useMinhaContaStore } from '../../../context/minhaContaProvider';\n\nexport function EmptyState() {\n const emptyStateImg = useMinhaContaStore((state) => state.planosDialog.emptyStateImg);\n\n return (\n <Grid container spacing={2} sx={{ padding: '1rem 0', direction: 'column', alignItems: 'center' }}>\n {!!emptyStateImg && (\n <Grid size={12}>\n <img src={emptyStateImg} alt={'emptyStateImg'} />\n </Grid>\n )}\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleMD'>Você precisa de um plano especial</Typography>\n </Grid>\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='bodyMD'>Para trocar de plano solicite ajuda da nossa equipe no botão abaixo.</Typography>\n </Grid>\n </Grid>\n );\n}\n","import { styled } from '@mui/material';\n\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface SChevronProps {\n side: 'right' | 'left';\n}\n\nexport const SChevron = styled('div')<SChevronProps>`\n display: flex;\n align-items: center;\n border-radius: 4px;\n cursor: pointer;\n\n :hover {\n background-color: ${colorPalette.neutral[30]};\n }\n\n @media (max-width: 450px) {\n position: absolute;\n top: 47%;\n z-index: 100;\n background-color: #fff;\n border-radius: 50%;\n\n ${({ side }) => `${side}: 0;`}\n }\n`;\n","import { styled } from '@mui/material';\n\nimport { colorPalette } from '@s_mart/tokens';\n\nexport const SPlanoContainer = styled('div')`\n display: flex;\n min-width: calc(100% / 3);\n max-width: calc(100% / 3); // Precisa ter o min e max, por algum krl o width não funciona\n\n @media (max-width: 900px) {\n min-width: calc(100% / 2);\n max-width: calc(100% / 2);\n }\n\n @media (max-width: 700px) {\n min-width: 100%;\n max-width: 100%;\n }\n`;\n\ninterface SPlanoCardProps {\n destaque?: boolean;\n disabled?: boolean;\n}\n\nexport const SPlanoCard = styled('div')<SPlanoCardProps>`\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n padding: 2rem 1.5rem 1.5rem;\n margin: 0.8rem;\n border: ${({ destaque, theme }) => (destaque ? `2px solid ${theme.palette.primary.main}` : undefined)};\n background-color: ${({ disabled }) => (disabled ? colorPalette.neutral[30] : undefined)};\n opacity: ${({ disabled }) => (disabled ? 0.6 : undefined)};\n\n @media (max-width: 1050px) {\n margin: 0.5rem;\n }\n\n @media (max-width: 400px) {\n padding: 1rem;\n }\n`;\n\nexport const SPlanoCardHeader = styled('div')`\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n min-height: 7rem;\n`;\n","import { LIcon } from '@s_mart/core';\nimport { lineCheckCircle, lineWhatsApp } from '@s_mart/regular-icons';\nimport { lineStar } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, Tooltip, type TooltipProps, Typography } from '@mui/material';\n\nimport { useMinhaContaStore } from '../../../../context/minhaContaProvider';\nimport getPeriodicidadeLabel from '../../../../utils/getPeriodicidadeLabel';\nimport openWhatsapp from '../../../../utils/openWhatsapp';\nimport type { IPlano } from '../../planosDialog.types';\nimport { SPlanoCard, SPlanoCardHeader, SPlanoContainer } from './plano.styles';\n\ninterface PlanoProps {\n plano: IPlano;\n id: string;\n reduceFont: boolean;\n periodicidadePlanoAtual: number;\n\n onContratar: (plano: IPlano) => void;\n}\n\nexport function Plano({ plano, id, reduceFont, onContratar, periodicidadePlanoAtual }: PlanoProps) {\n const esconderValorPlanos = useMinhaContaStore((state) => state.planosDialog.esconderValorPlanos);\n const habilitarPlanoAtual = useMinhaContaStore((state) => state.planosDialog.habilitarPlanoAtual);\n const telefoneCS = useMinhaContaStore((state) => state.telefoneCS);\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n\n const desabilitarPlanoAtual = plano.planoAtual && !habilitarPlanoAtual;\n\n const getButtonLabel = () => {\n if (desabilitarPlanoAtual) return 'Seu plano atual';\n\n if (esconderValorPlanos) return 'Quero saber mais';\n\n if (habilitarPlanoAtual && plano.planoAtual) return 'Contratar plano';\n\n if (plano.periodicidade !== periodicidadePlanoAtual) return 'Contratar plano';\n\n if (plano.valorMensalMenorQueAtual) {\n return 'Diminuir plano';\n }\n return 'Aumentar plano';\n };\n\n return (\n <SPlanoContainer id={id}>\n <TooltipOpcional\n title={\n plano.disabled30Dias ? (\n <Typography variant='bodyXS'>\n A troca para um plano de valor <br />\n menor, só é possível após 30 dias <br />\n de uso do seu plano atual.\n </Typography>\n ) : (\n ''\n )\n }\n placement='right'\n >\n <SPlanoCard\n destaque={!!plano.destaque}\n disabled={desabilitarPlanoAtual || plano.disabled || plano.disabled30Dias}\n >\n {!!plano.destaque && (\n <LIcon\n icon={lineStar}\n color={colorPalette.yellow[300]}\n style={{ position: 'absolute', top: '5px', right: '5px' }}\n />\n )}\n\n <SPlanoCardHeader>\n <div style={{ textAlign: 'center' }}>\n <Typography variant={reduceFont ? 'titleMS' : 'titleMD'}>{plano.nome}</Typography>\n </div>\n\n {!!plano.fraseDeEfeito && (\n <div>\n <Typography variant='bodySM' sx={{ color: colorPalette.neutral[100] }}>\n {plano.fraseDeEfeito}\n </Typography>\n </div>\n )}\n\n {!esconderValorPlanos && (\n <>\n {!!plano.valorPeriodicoPromocional && (\n <div>\n <Typography\n variant='bodySM'\n sx={{ color: colorPalette.red[300] }}\n style={{ textDecorationLine: 'line-through', marginRight: '2rem' }}\n >\n R$ {plano.valorPeriodico}\n </Typography>\n </div>\n )}\n\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'end' }}>\n <Typography\n variant='titleXXS'\n sx={{\n alignSelf: 'center',\n }}\n >\n R$\n </Typography>\n <Typography\n variant={reduceFont ? 'titleLG' : 'titleXL'}\n style={{ fontSize: '3rem' }}\n >\n {plano.valorPeriodicoPromocional || plano.valorPeriodico}\n </Typography>\n <Typography\n variant={reduceFont ? 'titleMS' : 'titleMD'}\n sx={{\n marginBottom: '0.3rem',\n }}\n >\n /{getPeriodicidadeLabel(plano.periodicidade)}\n </Typography>\n </div>\n </>\n )}\n </SPlanoCardHeader>\n\n <Button\n fullWidth\n variant={desabilitarPlanoAtual ? 'neutral' : 'contained'}\n disabled={desabilitarPlanoAtual || plano.disabled || plano.disabled30Dias}\n startIcon={\n (desabilitarPlanoAtual || esconderValorPlanos) && (\n <LIcon icon={desabilitarPlanoAtual ? lineCheckCircle : lineWhatsApp} size='25px' />\n )\n }\n onClick={() => {\n if (esconderValorPlanos) {\n openWhatsapp(telefoneCS || telefoneSuporte);\n } else {\n onContratar(plano);\n }\n }}\n style={{ margin: '1.5rem 0' }}\n >\n {getButtonLabel()}\n </Button>\n\n <div style={{ paddingLeft: '1rem' }}>\n <Typography variant='bodySM'>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: Descrição do plano é cadastrada pela própria empresa, não é input de usuário final\n dangerouslySetInnerHTML={{ __html: plano.descricao }}\n />\n </Typography>\n </div>\n </SPlanoCard>\n </TooltipOpcional>\n </SPlanoContainer>\n );\n}\n\nfunction TooltipOpcional(props: TooltipProps) {\n if (props.title) return <Tooltip {...props} />;\n\n return <>{props.children}</>;\n}\n","import { useMediaQuery } from '@mui/material';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport { useCallback, useMemo } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useApi, useMinhaContaStore } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { IPlanoRaw, Planos } from '../../../helpers/contrateApi/contrateApi.types';\nimport { useAppStore } from '../../../store/app/useAppStore';\nimport type { IPlano, PlanosDialogFormValues } from '../planosDialog.types';\nimport type { ListagemPlanosProps } from './listagemPlanos.types';\n\nconst useListagemPlanos = ({ planos }: ListagemPlanosProps) => {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const queryClient = useQueryClient();\n\n const codigoPlanoAtual = meuPlano?.codigoPlano;\n const periodicidadePlanoAtual = meuPlano?.periodicidade ?? null;\n const valorPlanoAtual = meuPlano?.valor;\n const dataContratacaoPlanoAtual = meuPlano?.dataContratacao;\n const recursosPlanoAtual = meuPlano?.recursos;\n\n const setLoading = useAppStore((state) => state.setLoading);\n const bloquearDowngrade = useMinhaContaStore((state) => state.planosDialog.bloquearDowngrade);\n const bloquearDowngrade30Dias = useMinhaContaStore((state) => state.planosDialog.bloquearDowngrade30Dias);\n const desabilitarPlanosMenores = useMinhaContaStore((state) => state.planosDialog.desabilitarPlanosMenores);\n const mostrarSomentePlanosDaPeriodicidade = useMinhaContaStore(\n (state) => state.planosDialog.mostrarSomentePlanosDaPeriodicidade,\n );\n const planosDeterminados = useMinhaContaStore(\n (state) => state.planosDialog.mostrarPlanosDeterminados?.codigoPlanoValor,\n );\n\n const { handleErrors } = useNotificationContext();\n\n const { watch, setValue } = useFormContext<PlanosDialogFormValues>();\n const maxWidth900 = useMediaQuery('(max-width: 900px)');\n const maxWidth700 = useMediaQuery('(max-width: 700px)');\n const maxWidth450 = useMediaQuery('(max-width: 450px)');\n const filtroPeriodicidade = watch('filtroPeriodicidade');\n\n const downgradeBloqueado30Dias =\n !!bloquearDowngrade30Dias && dayjs().diff(dayjs(dataContratacaoPlanoAtual), 'days') < 30;\n\n const scrollControl = useMemo(() => {\n const aux = { previous: 0, next: 4 };\n\n if (maxWidth700) aux.next = 2;\n else if (maxWidth900) aux.next = 3;\n\n return aux;\n }, [maxWidth700, maxWidth900]);\n\n // Tem que ser function senão dá erro de initialization\n const getValorMensal = useCallback((valorPlano: number, periodicidade: number | null) => {\n switch (periodicidade) {\n case 1:\n return valorPlano / 3;\n case 2:\n return valorPlano / 6;\n case 3:\n return valorPlano / 12;\n default:\n return valorPlano;\n }\n }, []);\n\n const planosFiltrados = useMemo(() => {\n let filtrados: IPlanoRaw[] = [];\n\n if (!planos) return filtrados as IPlano[];\n\n if (planosDeterminados && !mostrarSomentePlanosDaPeriodicidade) {\n const todosPlanos = [...planos.mensais, ...planos.trimestrais, ...planos.semestrais, ...planos.anuais];\n\n filtrados = todosPlanos.filter((plano) => planosDeterminados.includes(plano.codigoPlanoValor));\n } else if (filtroPeriodicidade) {\n const periodicidades: (keyof Planos)[] = ['mensais', 'trimestrais', 'semestrais', 'anuais'];\n\n const periodicidade = mostrarSomentePlanosDaPeriodicidade || periodicidades[filtroPeriodicidade.value];\n\n filtrados = planos[periodicidade];\n }\n\n filtrados.sort((a, b) => a.valorPeriodico - b.valorPeriodico);\n\n const extended: IPlano[] = filtrados.map((plano) => {\n const valorPlano = plano.valorPeriodicoPromocional || plano.valorPeriodico;\n const valorMensalMenorQueAtual =\n getValorMensal(valorPlano, plano.periodicidade) < getValorMensal(valorPlanoAtual ?? 0, periodicidadePlanoAtual);\n\n return {\n ...plano,\n planoAtual: plano.codigo === codigoPlanoAtual && plano.periodicidade === periodicidadePlanoAtual,\n valorMensalMenorQueAtual,\n disabled: (!!bloquearDowngrade || !!desabilitarPlanosMenores) && valorMensalMenorQueAtual,\n disabled30Dias: downgradeBloqueado30Dias && valorMensalMenorQueAtual,\n };\n });\n\n return extended;\n }, [\n planos,\n bloquearDowngrade,\n periodicidadePlanoAtual,\n downgradeBloqueado30Dias,\n getValorMensal,\n valorPlanoAtual,\n desabilitarPlanosMenores,\n mostrarSomentePlanosDaPeriodicidade,\n codigoPlanoAtual,\n filtroPeriodicidade,\n planosDeterminados,\n ]);\n\n const showScrollControllers = useMemo(() => {\n if (maxWidth700) return planosFiltrados.length > 1;\n if (maxWidth900) return planosFiltrados.length > 2;\n\n return planosFiltrados.length > 3;\n }, [maxWidth700, maxWidth900, planosFiltrados]);\n\n const scrollPlanos = (to: 'next' | 'previous') => {\n const planoIndex = scrollControl[to];\n\n if (planoIndex === 0 || planoIndex > planosFiltrados.length) return;\n\n const elem = document.getElementById(`plano-${planoIndex}`);\n\n if (elem) {\n elem.scrollIntoView({ behavior: 'smooth' });\n\n if (to === 'next') {\n scrollControl.next++;\n scrollControl.previous++;\n } else {\n scrollControl.next--;\n scrollControl.previous--;\n }\n }\n };\n\n const handleClickContratarPlano = async (plano: IPlano) => {\n try {\n setLoading(true);\n const resp = await queryClient.ensureQueryData(\n api.buscarPlano({\n params: { periodicidade: plano.periodicidade },\n path: { codigo: plano.codigo },\n }),\n );\n\n if (resp.data.data) {\n const recursosPreSelecionados: Record<string, boolean> = {};\n const recursosIncluidos = resp.data.data.recursos\n ?.filter((it) => !it?.valorRecurso)\n ?.map((it) => it?.slugRecurso);\n const recursosContratados = recursosPlanoAtual?.filter((it) => it.recursoContratado);\n\n recursosContratados?.forEach((it) => {\n const existeNoPlanoSelecionado = resp.data.data.recursos.some((rec) => rec.slugRecurso === it.slugRecurso);\n\n if (existeNoPlanoSelecionado && !recursosIncluidos?.includes(it.slugRecurso)) {\n recursosPreSelecionados[it.slugRecurso] = true;\n }\n });\n\n setValue('recursosSelecionados', recursosPreSelecionados);\n setValue('planoSelecionado', { ...plano, recursos: resp.data.data.recursos });\n }\n\n setLoading(false);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n return {\n planosFiltrados,\n scrollPlanos,\n showScrollControllers,\n maxWidth700,\n maxWidth450,\n handleClickContratarPlano,\n periodicidadePlanoAtual,\n };\n};\n\nexport default useListagemPlanos;\n","import { LIcon } from '@s_mart/core';\nimport { lineChevronLeft, lineChevronRight } from '@s_mart/regular-icons';\n\nimport { SChevron } from './listagemPlanos.styles';\nimport { Plano } from './plano/plano';\nimport useListagemPlanos from './useListagemPlanos';\nimport type { ListagemPlanosProps } from './listagemPlanos.types';\n\nexport function ListagemPlanos(props: ListagemPlanosProps) {\n const {\n planosFiltrados,\n scrollPlanos,\n showScrollControllers,\n maxWidth700,\n maxWidth450,\n handleClickContratarPlano,\n periodicidadePlanoAtual,\n } = useListagemPlanos(props);\n\n return (\n <div style={{ display: 'flex', position: 'relative' }}>\n {showScrollControllers && (\n <SChevron side=\"left\" onClick={() => scrollPlanos('previous')}>\n <LIcon icon={lineChevronLeft} size={maxWidth700 ? '2rem' : '3rem'} />\n </SChevron>\n )}\n\n <div\n style={{\n display: 'flex',\n justifyContent: showScrollControllers ? undefined : 'center',\n overflow: 'hidden',\n flex: 1,\n }}\n >\n {planosFiltrados.map((plano, index) => (\n <Plano\n key={plano.codigoPlanoValor}\n id={`plano-${index + 1}`}\n plano={plano}\n reduceFont={maxWidth450}\n periodicidadePlanoAtual={periodicidadePlanoAtual ?? 0}\n onContratar={handleClickContratarPlano}\n />\n ))}\n </div>\n\n {showScrollControllers && (\n <SChevron side=\"right\" onClick={() => scrollPlanos('next')}>\n <LIcon icon={lineChevronRight} size={maxWidth700 ? '2rem' : '3rem'} />\n </SChevron>\n )}\n </div>\n );\n}\n","import { CircularProgress } from '@mui/material';\n\nexport function Loading() {\n return (\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '20vh' }}>\n <CircularProgress />\n </div>\n );\n}\n","export const periodicidadeOptions = [\n { label: 'Mensais', value: 0 },\n { label: 'Trimestrais', value: 1 },\n { label: 'Semestrais', value: 2 },\n { label: 'Anuais', value: 3 },\n];\n","import { useMutation, useQuery } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useApi, useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../context/notificationProvider';\nimport type { IPlanoRecurso } from '../../helpers/contrateApi/meusDadosApi.types';\nimport { useAppStore } from '../../store/app/useAppStore';\nimport { periodicidadeOptions } from './planosDialog.static';\nimport type { IPlanoWithRecursos, PlanosDialogFormValues, UsePlanosDialogProps } from './planosDialog.types';\n\nconst usePlanosDialog = ({ onClose }: UsePlanosDialogProps) => {\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n const mostrarPlanosDeterminados = useMinhaContaStore((state) => state.planosDialog.mostrarPlanosDeterminados);\n const esconderPeriodicidade = useMinhaContaStore((state) => state.planosDialog.esconderPeriodicidade);\n const onContratarSuccess = useMinhaContaStore((state) => state.planosDialog.onContratarSuccess);\n const { handleErrors, setNotification } = useNotificationContext();\n const setLoading = useAppStore((state) => state.setLoading);\n\n const api = useApi();\n\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const codigoGrupoMeuPlano = meuPlano?.codigoGrupo;\n const periodicidadeMeuPlano = meuPlano?.periodicidade ?? null;\n\n const codigoGrupo = mostrarPlanosDeterminados?.codigoGrupo || codigoGrupoMeuPlano;\n\n const planosEGruposQuery = useQuery({\n // biome-ignore lint/style/noNonNullAssertion: Vai estar definido defindo a validação no campo enabled\n ...api.listarPlanosEGrupos({ params: { grupo: codigoGrupo! } }),\n enabled: meuPlanoQuery.isFetched && Boolean(codigoGrupo),\n select({ data }) {\n if (\n data.data.planos &&\n ![\n ...data.data.planos.mensais,\n ...data.data.planos.trimestrais,\n ...data.data.planos.semestrais,\n ...data.data.planos.anuais,\n ].length\n ) {\n data.data.planos = null;\n }\n\n return data.data;\n },\n });\n const planosEGrupos = planosEGruposQuery.data;\n\n const contratarPlano = useMutation(api.contratarPlano());\n const contratarRecurso = useMutation(api.contratarRecurso());\n\n const isLoading = !meuPlanoQuery.isFetched || !planosEGruposQuery.data;\n\n const initialValues = useMemo(() => {\n const values: Partial<PlanosDialogFormValues> = {};\n\n if (meuPlanoQuery.isFetched && typeof periodicidadeMeuPlano === 'number')\n values.filtroPeriodicidade = periodicidadeOptions[periodicidadeMeuPlano];\n\n return values;\n }, [periodicidadeMeuPlano, meuPlanoQuery.isFetched]);\n\n const filtroPeriodicidadeOptions = useMemo(() => {\n const options: { value: number; label: string }[] = [];\n\n if (planosEGrupos?.planos) {\n if (planosEGrupos.planos.mensais.length) options.push(periodicidadeOptions[0]);\n if (planosEGrupos.planos.trimestrais.length) options.push(periodicidadeOptions[1]);\n if (planosEGrupos.planos.semestrais.length) options.push(periodicidadeOptions[2]);\n if (planosEGrupos.planos.anuais.length) options.push(periodicidadeOptions[3]);\n }\n\n return options;\n }, [planosEGrupos]);\n\n const mostrarPeriodicidade =\n !esconderPeriodicidade && !mostrarPlanosDeterminados?.codigoPlanoValor && filtroPeriodicidadeOptions.length > 1;\n\n const handleContratarPlano = async (values: PlanosDialogFormValues) => {\n try {\n if (!values.planoSelecionado) throw { error: 'Ocorreu um erro inesperado' };\n setLoading(true);\n\n const query = {\n codigoPlano: values.planoSelecionado.codigo,\n codigoPlanoValor: values.planoSelecionado.codigoPlanoValor,\n };\n\n await contratarPlano.mutateAsync(query);\n\n const successCallback = () => {\n // biome-ignore lint/style/noNonNullAssertion: É esperado que tenha um plano Selecionado após a request\n onContratarSuccess?.(meuPlano!, values.planoSelecionado!);\n\n setNotification({\n title: 'Seu plano foi atualizado com sucesso.',\n });\n\n meuPlanoQuery.refetch();\n onClose();\n };\n\n const recursosSelecionados = Object.entries(values.recursosSelecionados || {});\n\n if (recursosSelecionados.length) {\n const recursosContratar: IPlanoRecurso[] = [];\n\n recursosSelecionados.forEach(([key, value]) => {\n if (value) {\n const _recurso = values.planoSelecionado?.recursos?.find((it) => it.slugRecurso === key);\n\n if (_recurso) recursosContratar.push(_recurso);\n }\n });\n\n const recursosComErro = await handleContratarRecursos(recursosContratar);\n\n if (recursosComErro.length) {\n const aux = recursosComErro.map((it) => it.nomeRecurso);\n\n successCallback();\n\n setNotification({\n title: 'Ocorreu um erro ao contratar os seguintes recursos:',\n message: aux.join(' ; '),\n duration: 10000,\n });\n } else {\n successCallback();\n }\n } else {\n successCallback();\n }\n\n setLoading(false);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n const handleContratarRecursos = (recursos: IPlanoRecurso[]) => {\n const recursosComErro: IPlanoRecurso[] = [];\n\n return new Promise<IPlanoRecurso[]>((resolve) => {\n const contrataRecursive = (recursosContratar: IPlanoRecurso[]) => {\n const recursoAux = recursosContratar.shift();\n\n if (!recursoAux) return resolve(recursosComErro);\n\n contratarRecurso\n .mutateAsync(Number(recursoAux.codigoRecurso))\n .catch(() => recursosComErro.push(recursoAux))\n .finally(() => contrataRecursive(recursosContratar));\n };\n\n contrataRecursive([...recursos]);\n });\n };\n\n const getDialogTitle = (planoSelecionado?: IPlanoWithRecursos) => {\n if (planoSelecionado) {\n if (planoSelecionado.periodicidade !== periodicidadeMeuPlano) return 'Contratar plano';\n\n if (planoSelecionado.valorMensalMenorQueAtual) {\n return 'Diminuir plano';\n } else {\n return 'Aumentar plano';\n }\n } else {\n return 'Meus planos';\n }\n };\n\n return {\n telefoneSuporte,\n handleContratarPlano,\n isLoading,\n mostrarPeriodicidade,\n filtroPeriodicidadeOptions,\n initialValues,\n planosEGrupos,\n getDialogTitle,\n };\n};\n\nexport default usePlanosDialog;\n","import { Dialog, LIcon } from '@s_mart/core';\nimport { Form, Select } from '@s_mart/form';\nimport { lineWhatsApp } from '@s_mart/regular-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, Typography } from '@mui/material';\n\nimport { useDialog } from '../../hooks/useDialog';\nimport openWhatsapp from '../../utils/openWhatsapp';\nimport { ContratarRecursos } from './contratarRecursos/contratarRecursos';\nimport { EmptyState } from './emptyState/emptyState';\nimport { ListagemPlanos } from './listagemPlanos/listagemPlanos';\nimport { Loading } from './loading/loading';\nimport type { PlanosDialogProps } from './planosDialog.types';\nimport usePlanosDialog from './usePlanosDialog';\n\nexport function PlanosDialog({ onClose }: Pick<PlanosDialogProps, 'onClose'>) {\n const { open, onCloseDialog } = useDialog(onClose);\n const {\n isLoading,\n mostrarPeriodicidade,\n filtroPeriodicidadeOptions,\n handleContratarPlano,\n telefoneSuporte,\n initialValues,\n planosEGrupos,\n getDialogTitle,\n } = usePlanosDialog({ onClose: onCloseDialog });\n\n const getDialogContent = (planoSelecionado: boolean) => {\n if (isLoading) return <Loading />;\n\n if (!planosEGrupos?.planos) return <EmptyState />;\n\n if (planoSelecionado) return <ContratarRecursos />;\n\n return <ListagemPlanos planos={planosEGrupos.planos} />;\n };\n\n return (\n <Dialog\n open={open}\n onClose={onCloseDialog}\n fullWidth\n maxWidth='xl'\n closeIcon\n disableBackdropClick\n >\n <Form\n onSubmit={handleContratarPlano}\n defaultValues={initialValues}\n style={{ display: 'flex', flexDirection: 'column', overflowY: 'auto' }} // Corrige quebra do layout causada pelo form\n >\n {({ watch, setValue }) => {\n const planoSelecionado = watch('planoSelecionado');\n\n return (\n <>\n <Dialog.Header>\n <div style={{ display: 'flex', flex: 1, justifyContent: 'space-between' }}>\n <Typography variant='titleMD'>{getDialogTitle(planoSelecionado)}</Typography>\n\n {mostrarPeriodicidade && !planoSelecionado && (\n <Select\n name='filtroPeriodicidade'\n options={filtroPeriodicidadeOptions}\n style={{ minWidth: '7rem', marginRight: '0.5rem' }}\n getOptionKey={(opt) => opt.value}\n getOptionLabel={(opt) => opt.label}\n />\n )}\n </div>\n </Dialog.Header>\n\n <Dialog.Content>{getDialogContent(!!planoSelecionado)}</Dialog.Content>\n\n <Dialog.Footer>\n {planoSelecionado ? (\n <Button\n variant='neutral'\n disableRipple\n onClick={() => {\n setValue('planoSelecionado', undefined);\n setValue('recursosSelecionados', undefined);\n }}\n >\n Voltar\n </Button>\n ) : (\n <Button\n variant='outlined'\n color='neutral'\n startIcon={<LIcon icon={lineWhatsApp} size='22px' removeMargin />}\n style={{ color: colorPalette.neutral[100] }}\n onClick={() => openWhatsapp(telefoneSuporte)}\n >\n Preciso de Ajuda\n </Button>\n )}\n </Dialog.Footer>\n </>\n );\n }}\n </Form>\n </Dialog>\n );\n}\n","import { NotificationProvider } from '../../context/notificationProvider';\n\nimport { PlanosDialog as PlanosDialogComp } from './planosDialog';\nimport type { PlanosDialogProps } from './planosDialog.types';\n\nexport function PlanosDialog({ onClose, onNotification }: PlanosDialogProps) {\n return (\n <NotificationProvider onNotification={onNotification}>\n <PlanosDialogComp onClose={onClose} />\n </NotificationProvider>\n );\n}\n","import { Button, Grid, Typography } from '@mui/material';\nimport { Dialog } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { useQuery } from '@tanstack/react-query';\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useDialog } from '../../../hooks/useDialog';\nimport getPeriodicidadeLabel from '../../../utils/getPeriodicidadeLabel';\nimport type { ConfirmacaoAdquirirDialogProps } from './confirmacaoAdquirirDialog.types';\n\nexport function ConfirmacaoAdquirirDialog({ recurso, onClose, onConfirmar }: ConfirmacaoAdquirirDialogProps) {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const periodicidade = meuPlano?.periodicidade ?? null;\n const { open, onCloseDialog } = useDialog(onClose);\n\n const handleConfirmar = async () => {\n await onConfirmar(recurso);\n\n onCloseDialog();\n };\n\n return (\n <Dialog open={open} closeIcon onClose={onCloseDialog}>\n <Dialog.Header>Adquirir novo recurso</Dialog.Header>\n\n <Dialog.Content>\n <Grid container>\n <Grid size={12}>\n <Typography variant='bodySM'>Você está adquirindo um recurso do seu sistema: </Typography>\n <Typography variant='titleXS'>{recurso.nomeRecurso}</Typography>\n </Grid>\n\n <Grid size={12}>\n <Typography variant='bodySM'>\n Informamos que sua {getPeriodicidadeLabel(periodicidade, { modelo: 'mensalidade' })} terá uma adição de{' '}\n {valorMask.format(recurso.valorRecurso)}\n </Typography>\n </Grid>\n\n <br />\n <br />\n\n <Grid size={12}>\n <Typography variant='bodySM'>Deseja confirmar a aquisição?</Typography>\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button variant='neutral' onClick={onCloseDialog}>\n Cancelar\n </Button>\n\n <Button onClick={handleConfirmar}>Confirmar</Button>\n </Dialog.Footer>\n </Dialog>\n );\n}\n","import { Dialog } from '@s_mart/core';\n\nimport { Button, Grid, Typography } from '@mui/material';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useDialog } from '../../../hooks/useDialog';\nimport getPeriodicidadeLabel from '../../../utils/getPeriodicidadeLabel';\nimport type { ConfirmacaoRemoverDialogProps } from './confirmacaoRemoverDialog.types';\n\nexport function ConfirmacaoRemoverDialog({\n recurso,\n onClose,\n onRemover,\n}: ConfirmacaoRemoverDialogProps) {\n const api = useApi();\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const periodicidade = meuPlano?.periodicidade ?? null;\n const { open, onCloseDialog } = useDialog(onClose);\n\n const handleRemover = async () => {\n await onRemover(recurso);\n\n onCloseDialog();\n };\n\n return (\n <Dialog open={open} closeIcon onClose={onCloseDialog}>\n <Dialog.Header>Remover recurso</Dialog.Header>\n\n <Dialog.Content>\n <Grid container>\n <Grid size={12}>\n <Typography variant='bodySM'>\n Você está removendo um recurso do seu sistema:{' '}\n </Typography>\n <Typography variant='titleXS'>{recurso.nomeRecurso}</Typography>\n </Grid>\n\n <Grid size={12}>\n <Typography variant='bodySM'>\n Sua {getPeriodicidadeLabel(periodicidade, { modelo: 'mensalidade' })} terá uma\n alteração.\n </Typography>\n </Grid>\n\n <br />\n <br />\n\n <Grid size={12}>\n <Typography variant='bodySM'>Deseja confirmar a remoção?</Typography>\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button color='error' onClick={handleRemover}>\n Remover\n </Button>\n\n <Button variant='neutral' onClick={onCloseDialog}>\n Cancelar\n </Button>\n </Dialog.Footer>\n </Dialog>\n );\n}\n","import { Grid, Typography } from '@mui/material';\nimport { useMinhaContaStore } from '../../../context/minhaContaProvider';\n\nexport function EmptyState() {\n const emptyStateImg = useMinhaContaStore((state) => state.recursosDialog.emptyStateImg);\n\n return (\n <Grid container spacing={2} sx={{ direction: 'column', alignItems: 'center', margin: '2rem 0', width: '100%' }}>\n {!!emptyStateImg && (\n <Grid>\n <img src={emptyStateImg} alt='emptyStateImg' />\n </Grid>\n )}\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleMD'>Novos recursos vêm aí</Typography>\n </Grid>\n\n <Grid size={12} sx={{\n textAlign: 'center'\n }}>\n <Typography variant='bodyMD'>Você já possui todos os recursos disponíveis no momento.</Typography>\n </Grid>\n </Grid>\n );\n}\n","import { styled } from '@mui/material';\n\nexport const SImg = styled('img')`\n max-width: 520px;\n\n @media only screen and (max-width: 640px) {\n max-width: 400px;\n }\n\n @media only screen and (max-width: 520px) {\n max-width: 300px;\n }\n\n @media only screen and (max-width: 420px) {\n max-width: 260px;\n }\n`;\n","import { Dialog } from '@s_mart/core';\n\nimport { Button, Grid, Typography } from '@mui/material';\n\nimport { useDialog } from '../../../hooks/useDialog';\nimport { SImg } from './gifDialog.styles';\nimport type { GifDialogProps } from './gifDialog.types';\n\nexport function GifDialog({\n recurso,\n onClose,\n onAdquirirRecurso,\n onRemoverRecurso,\n}: GifDialogProps) {\n const { open, onCloseDialog } = useDialog(onClose);\n\n const recursoIncluso = recurso.valorRecurso === 0 && recurso.recursoContratado;\n\n const handleRemover = async () => {\n await onRemoverRecurso(recurso);\n\n onCloseDialog();\n };\n\n const handleAdquirir = async () => {\n await onAdquirirRecurso(recurso);\n\n onCloseDialog();\n };\n\n return (\n <Dialog open={open} closeIcon onClose={onCloseDialog}>\n <Dialog.Header>Este recurso pode ajudar você!</Dialog.Header>\n\n <Dialog.Content>\n <Grid container spacing={2} sx={{ direction: 'column', alignItems: 'center' }}>\n <Grid>\n <Typography variant='titleSM'>{recurso.nomeRecurso}</Typography>\n </Grid>\n\n <Grid>\n <Typography variant='bodySM'>{recurso.descricaoRecurso}</Typography>\n </Grid>\n\n {recurso.gif && (\n <Grid>\n <SImg src={recurso.gif} />\n </Grid>\n )}\n </Grid>\n </Dialog.Content>\n\n {!recursoIncluso && !recurso.dataExclusaoRecurso && (\n <Dialog.Footer>\n {recurso.recursoContratado ? (\n <Button color='error' onClick={handleRemover}>\n Remover recurso\n </Button>\n ) : (\n <Button onClick={handleAdquirir}>Adquirir recurso</Button>\n )}\n </Dialog.Footer>\n )}\n </Dialog>\n );\n}\n","import { css, styled } from '@mui/material';\n\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface SContainerProps {\n recursoContratado: boolean;\n emDestaque: boolean;\n}\n\nexport const SContainer = styled('div')<SContainerProps>`\n display: flex;\n padding: 1rem;\n gap: 1rem;\n min-height: 10rem;\n border: 1px solid ${colorPalette.neutral[50]};\n border-radius: 6px;\n background-color: ${({ recursoContratado }) =>\n recursoContratado ? colorPalette.neutral[30] : colorPalette.neutral[0]};\n transition: 200ms;\n\n ${({ emDestaque, theme }) =>\n emDestaque &&\n css`\n border: 1px solid ${theme.palette.primary.main};\n box-shadow:\n 0px 0px 4px 0px rgba(0, 0, 0, 0.25),\n 0px 0px 1px 0px rgba(0, 0, 0, 0.03);\n `}\n\n :hover {\n background-color: ${({ recursoContratado }) => recursoContratado && colorPalette.neutral[50]};\n border: 1px solid ${({ recursoContratado, theme }) => !recursoContratado && theme?.palette?.primary?.main};\n }\n`;\n\ninterface SImgProps {\n hasGif: boolean;\n}\n\nexport const SImg = styled('img')<SImgProps>`\n height: 3.5rem;\n width: 3.5rem;\n\n cursor: ${({ hasGif }) => (hasGif ? 'pointer' : undefined)};\n`;\n\ninterface SFooterProps {\n emDestaque: boolean;\n}\n\nexport const SFooter = styled('div')<SFooterProps>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 0.5rem;\n\n ${({ emDestaque }) =>\n emDestaque &&\n css`\n justify-content: end;\n gap: 0.5rem;\n `}\n\n @media only screen and (max-width: 700px) {\n flex-direction: column;\n gap: 0.3rem;\n\n & button {\n width: 100%;\n }\n }\n`;\n","import { LIcon } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { lineCheckCircle } from '@s_mart/regular-icons';\nimport { lineStar, lineWhatsappBrands } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, Tooltip, Typography } from '@mui/material';\nimport dayjs from 'dayjs';\n\nimport { useMinhaContaStore } from '../../../context/minhaContaProvider';\nimport openWhatsapp from '../../../utils/openWhatsapp';\nimport { SContainer, SFooter, SImg } from './recurso.styles';\nimport type { RecursoProps } from './recurso.types';\n\nexport function Recurso({ recurso, periodicidade, onClick, onAdquirir, onRemover }: RecursoProps) {\n const telefoneCS = useMinhaContaStore((state) => state.telefoneCS);\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n const esconderValoresRecursos = useMinhaContaStore(\n (state) => state.recursosDialog.esconderValoresRecursos,\n );\n const recursoIncluso = recurso.valorRecurso === 0 && recurso.recursoContratado;\n const acaoSecundariaOnClickRecurso = useMinhaContaStore(\n (state) => state.recursosDialog.acaoSecundariaOnClickRecurso,\n );\n const naoPermitirRemoverRecursos = useMinhaContaStore(\n (state) => state.recursosDialog.naoPermitirRemoverRecursos,\n );\n\n const getFooterButton = () => {\n if (recursoIncluso) return <></>;\n\n if (recurso.recursoContratado) {\n if (recurso.dataExclusaoRecurso) {\n return (\n <Tooltip\n title={\n <Typography variant='bodySM'>\n Recurso disponível até {dayjs(recurso.dataExclusaoRecurso).format('DD/MM/YYYY')}\n </Typography>\n }\n >\n <div style={{ padding: '0.3rem 0' }}>\n <Typography variant='bodySM'>Removido</Typography>\n </div>\n </Tooltip>\n );\n }\n return (\n <Button\n variant='neutral'\n size='small'\n startIcon={\n naoPermitirRemoverRecursos ? (\n <LIcon icon={lineWhatsappBrands} size='22px' removeMargin />\n ) : undefined\n }\n onClick={(e) => {\n e.stopPropagation();\n\n if (naoPermitirRemoverRecursos) {\n openWhatsapp(telefoneCS || telefoneSuporte);\n } else {\n onRemover(recurso);\n }\n }}\n >\n Remover\n </Button>\n );\n }\n return (\n <Button\n variant={recurso.emDestaque ? 'contained' : 'outlined'}\n size='small'\n fullWidth={esconderValoresRecursos}\n startIcon={\n esconderValoresRecursos && <LIcon icon={lineWhatsappBrands} size='22px' removeMargin />\n }\n onClick={(e) => {\n if (esconderValoresRecursos) {\n openWhatsapp(telefoneCS || telefoneSuporte);\n } else {\n e.stopPropagation();\n onAdquirir(recurso);\n }\n\n acaoSecundariaOnClickRecurso?.();\n }}\n >\n {esconderValoresRecursos ? 'Quero saber mais' : 'Adquirir'}\n </Button>\n );\n };\n\n return (\n <SContainer\n recursoContratado={recurso.recursoContratado}\n emDestaque={recurso.emDestaque}\n onClick={() => recurso.gif && onClick(recurso)}\n >\n <div>\n <SImg src={recurso.caminhoImagem} hasGif={!!recurso.gif} />\n </div>\n\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n flex: 1,\n }}\n >\n <div>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.1rem' }}>\n <Typography variant='titleSM'>{recurso.nomeRecurso}</Typography>\n\n {recurso.recursoContratado && (\n <LIcon icon={lineCheckCircle} size='24px' color={colorPalette.green[500]} />\n )}\n {recurso.emDestaque && (\n <LIcon icon={lineStar} size='24px' color={colorPalette.yellow[300]} />\n )}\n </div>\n\n <Typography variant='bodySM'>{recurso.descricaoRecurso}</Typography>\n </div>\n\n <SFooter emDestaque={recurso.emDestaque}>\n {recursoIncluso ? (\n <Typography variant='titleXS' sx={{ padding: '0.3rem 0' }}>\n Recurso incluso\n </Typography>\n ) : (\n !esconderValoresRecursos && (\n <Typography variant='titleXS'>\n {valorMask.format(recurso.valorRecurso)}/{periodicidade}\n </Typography>\n )\n )}\n\n {getFooterButton()}\n </SFooter>\n </div>\n </SContainer>\n );\n}\n","import { useMutation, useQuery } from '@tanstack/react-query';\nimport { useMemo, useState } from 'react';\nimport { useApi, useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../context/notificationProvider';\nimport { useAppStore } from '../../store/app/useAppStore';\nimport getPeriodicidadeLabel from '../../utils/getPeriodicidadeLabel';\nimport type { IRecurso, RecursosFiltrados, RecursosSubDialogs } from './recursosDialog.types';\n\nconst useRecursosDialog = () => {\n const [openedDialog, setOpenedDialog] = useState<RecursosSubDialogs | null>(null);\n const api = useApi();\n\n const meuPlanoQuery = useQuery(api.buscarMeuPlanoRecursos());\n const meuPlano = meuPlanoQuery.data?.data.data;\n const contratarRecursoMutation = useMutation(api.contratarRecurso());\n const descontratarRecursoMutation = useMutation(api.descontratarRecurso());\n\n const _recursos = meuPlano?.recursos;\n const periodicidade = meuPlano?.periodicidade ?? null;\n\n const sistemaNome = useMinhaContaStore((state) => state.sistemaNome);\n const telefoneSuporte = useMinhaContaStore((state) => state.telefoneSuporte);\n const telefoneCS = useMinhaContaStore((state) => state.telefoneCS);\n const recursosGifs = useMinhaContaStore((state) => state.recursosDialog.recursosGifs);\n const recursoEmDestaque = useMinhaContaStore((state) => state.recursosDialog.recursoEmDestaque);\n const onContratarRecurso = useMinhaContaStore((state) => state.recursosDialog.onContratarRecurso);\n const onRemoverRecurso = useMinhaContaStore((state) => state.recursosDialog.onRemoverRecurso);\n const setLoading = useAppStore((state) => state.setLoading);\n const { handleErrors, setNotification } = useNotificationContext();\n\n const periodicidadeLabel = getPeriodicidadeLabel(periodicidade);\n\n const recursos = useMemo(() => {\n const aux: RecursosFiltrados = { contratados: [], naoContratados: [] };\n\n _recursos?.forEach((recurso) => {\n const gif = recursosGifs?.find((gif) => gif.slug === recurso.slugRecurso)?.gif || null;\n\n if (recurso.recursoContratado) {\n aux.contratados.push({ ...recurso, gif, emDestaque: false });\n } else {\n aux.naoContratados.push({ ...recurso, gif, emDestaque: recurso.slugRecurso === recursoEmDestaque });\n }\n });\n\n if (recursoEmDestaque) aux.naoContratados.sort((a) => (a.emDestaque ? -1 : 1));\n\n return aux;\n }, [_recursos, recursosGifs, recursoEmDestaque]);\n\n const adquirirRecurso = async (recurso: IRecurso) => {\n try {\n setLoading(true);\n await contratarRecursoMutation.mutateAsync(recurso.codigoRecurso);\n\n meuPlanoQuery.refetch();\n setNotification({ title: 'Novo recurso adquirido' });\n setLoading(false);\n\n onContratarRecurso?.(recurso);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n const removerRecurso = async (recurso: IRecurso) => {\n try {\n setLoading(true);\n await descontratarRecursoMutation.mutateAsync(recurso.codigoRecurso);\n\n meuPlanoQuery.refetch();\n setNotification({ title: 'O recurso foi removido' });\n setLoading(false);\n\n onRemoverRecurso?.(recurso);\n } catch (error) {\n handleErrors(error);\n }\n };\n\n const handleCloseDialog = () => setOpenedDialog(null);\n\n const handleClickRecurso = (recurso: IRecurso) => setOpenedDialog({ open: 'gif', recurso });\n\n const handleAdquirirRecurso = (recurso: IRecurso) => setOpenedDialog({ open: 'confirmacaoAdquirir', recurso });\n\n const handleRemoverRecurso = (recurso: IRecurso) => setOpenedDialog({ open: 'confirmacaoRemover', recurso });\n\n return {\n sistemaNome,\n isFetched: meuPlanoQuery.isFetched,\n telefoneSuporte,\n telefoneCS,\n recursos,\n periodicidadeLabel,\n handleClickRecurso,\n openedDialog,\n handleCloseDialog,\n handleAdquirirRecurso,\n handleRemoverRecurso,\n adquirirRecurso,\n removerRecurso,\n };\n};\n\nexport default useRecursosDialog;\n","import { Dialog, LIcon } from '@s_mart/core';\nimport { lineWhatsApp } from '@s_mart/regular-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, CircularProgress, Divider, Grid, Typography } from '@mui/material';\n\nimport { useDialog } from '../../hooks/useDialog';\nimport openWhatsapp from '../../utils/openWhatsapp';\nimport { ConfirmacaoAdquirirDialog } from './confirmacaoAdquirirDialog/confirmacaoAdquirirDialog';\nimport { ConfirmacaoRemoverDialog } from './confirmacaoRemoverDialog/confirmacaoRemoverDialog';\nimport { EmptyState } from './emptyState/emptyState';\nimport { GifDialog } from './gifDialog/gifDialog';\nimport { Recurso } from './recurso/recurso';\nimport type { RecursosDialogProps } from './recursosDialog.types';\nimport useRecursosDialog from './useRecursosDialog';\n\nexport function RecursosDialog({ onClose }: Pick<RecursosDialogProps, 'onClose'>) {\n const {\n sistemaNome,\n isFetched,\n telefoneSuporte,\n telefoneCS,\n recursos,\n periodicidadeLabel,\n handleClickRecurso,\n openedDialog,\n handleAdquirirRecurso,\n handleCloseDialog,\n handleRemoverRecurso,\n adquirirRecurso,\n removerRecurso,\n } = useRecursosDialog();\n const { open, onCloseDialog } = useDialog(onClose);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onCloseDialog}\n fullWidth\n maxWidth='lg'\n closeIcon\n disableBackdropClick\n >\n <Dialog.Header>Recursos {sistemaNome}</Dialog.Header>\n\n {isFetched ? (\n <>\n <Dialog.Content style={{ marginTop: '1rem' }}>\n <Grid container spacing={2}>\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center' }}>\n <Typography variant='titleSM'>Recursos feitos para ajudar você</Typography>\n\n <Divider sx={{ flex: 1, marginLeft: '1rem', color: colorPalette.neutral[30] }} />\n </Grid>\n\n <Grid size={12}>\n <Grid container spacing={2}>\n {recursos.naoContratados.length ? (\n recursos.naoContratados.map((recurso) => (\n <Grid\n key={recurso.codigoRecurso}\n size={{ xs: 12, sm: recurso.emDestaque ? 12 : 6 }}\n >\n <Recurso\n recurso={recurso}\n periodicidade={periodicidadeLabel}\n onClick={handleClickRecurso}\n onAdquirir={handleAdquirirRecurso}\n onRemover={handleRemoverRecurso}\n />\n </Grid>\n ))\n ) : (\n <EmptyState />\n )}\n </Grid>\n </Grid>\n\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center' }}>\n <Typography variant='titleSM'>Recursos que você já adquiriu</Typography>\n\n <Divider sx={{ flex: 1, marginLeft: '1rem', color: colorPalette.neutral[30] }} />\n </Grid>\n\n <Grid size={12}>\n <Grid container spacing={2}>\n {recursos.contratados.map((recurso) => (\n <Grid key={recurso.codigoRecurso} size={{ xs: 12, sm: 6 }}>\n <Recurso\n recurso={recurso}\n periodicidade={periodicidadeLabel}\n onClick={handleClickRecurso}\n onAdquirir={handleAdquirirRecurso}\n onRemover={handleRemoverRecurso}\n />\n </Grid>\n ))}\n </Grid>\n </Grid>\n </Grid>\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button\n variant='outlined'\n color='neutral'\n startIcon={<LIcon icon={lineWhatsApp} size='22px' removeMargin />}\n onClick={() => openWhatsapp(telefoneCS || telefoneSuporte)}\n >\n Preciso de Ajuda\n </Button>\n </Dialog.Footer>\n </>\n ) : (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '20vh',\n }}\n >\n <CircularProgress />\n </div>\n )}\n </Dialog>\n\n {openedDialog?.open === 'gif' && (\n <GifDialog\n recurso={openedDialog.recurso}\n onClose={handleCloseDialog}\n onAdquirirRecurso={adquirirRecurso}\n onRemoverRecurso={removerRecurso}\n />\n )}\n\n {openedDialog?.open === 'confirmacaoAdquirir' && (\n <ConfirmacaoAdquirirDialog\n recurso={openedDialog.recurso}\n onClose={handleCloseDialog}\n onConfirmar={adquirirRecurso}\n />\n )}\n\n {openedDialog?.open === 'confirmacaoRemover' && (\n <ConfirmacaoRemoverDialog\n recurso={openedDialog.recurso}\n onClose={handleCloseDialog}\n onRemover={removerRecurso}\n />\n )}\n </>\n );\n}\n","import { NotificationProvider } from '../../context/notificationProvider';\nimport { RecursosDialog as RecursosDialogComp } from './recursosDialog';\nimport type { RecursosDialogProps } from './recursosDialog.types';\n\nexport function RecursosDialog({ onClose, onNotification }: RecursosDialogProps) {\n return (\n <NotificationProvider onNotification={onNotification}>\n <RecursosDialogComp onClose={onClose} />\n </NotificationProvider>\n );\n}\n","import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { type PropsWithChildren, useState } from 'react';\n\nexport function MinhaContaQueryProvider({ children }: PropsWithChildren) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n retry: 1,\n staleTime: 5 * 60 * 1000,\n gcTime: 5 * 60 * 1000,\n },\n },\n }),\n );\n\n return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;\n}\n","import type { AxiosInstance } from 'axios';\n\nexport class ApiConfirmarEmail {\n private axiosSistemaPublico: AxiosInstance;\n\n constructor(axiosInstance: AxiosInstance) {\n this.axiosSistemaPublico = axiosInstance;\n }\n\n confirmarEmailEmpresa(token: string) {\n return this.axiosSistemaPublico.post(`/meus-dados/confirmar-atualizacao-do-email-da-empresa/${token}`);\n }\n confirmarEmailResponsavel(token: string) {\n return this.axiosSistemaPublico.post(`/meus-dados/confirmar-atualizacao-do-email-do-responsavel/${token}`);\n }\n}\n","import { styled } from '@mui/material';\nimport { Grid } from '@mui/material';\n\nexport const SBody = styled(Grid)`\n height: 100vh;\n\n background: ${({ theme }) => theme?.palette?.primary?.main};\n`;\n\nexport const SCardGrid = styled(Grid)`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1.5rem;\n\n background-color: #ffffff;\n padding: 32px;\n border-radius: 8px;\n`;\n","import { useCallback, useLayoutEffect } from 'react';\nimport parseError from '../../utils/parseError';\nimport type { ConfirmarEmailProps } from './confirmarEmail.types';\n\nexport const useConfirmarEmail = (props: ConfirmarEmailProps) => {\n const token = new URLSearchParams(window.location.search).get('token');\n\n const confirmarEmail = useCallback(\n async (token: string | null) => {\n try {\n if (token && props.tipo === 'empresa') await props.api.confirmarEmailEmpresa(token);\n else if (token && props.tipo === 'responsável') await props.api.confirmarEmailResponsavel(token);\n } catch (error) {\n const parsedError = parseError((error as any)?.response?.data || error);\n\n props.onNotification({ variant: 'error', title: parsedError[0] });\n }\n },\n [props.tipo, props.onNotification, props.api.confirmarEmailEmpresa, props.api.confirmarEmailResponsavel],\n );\n\n useLayoutEffect(() => {\n confirmarEmail(token);\n }, [confirmarEmail, token]);\n};\n","import { Button, Typography } from '@mui/material';\nimport { NotificationProvider } from '../../context/notificationProvider';\nimport { SBody, SCardGrid } from './confirmarEmail.styles';\nimport type { ConfirmarEmailProps } from './confirmarEmail.types';\nimport { useConfirmarEmail } from './useConfirmarEmail';\n\nexport function ConfirmarEmail(props: ConfirmarEmailProps) {\n useConfirmarEmail(props);\n\n return (\n <NotificationProvider onNotification={props.onNotification}>\n <SBody container sx={{ justifyContent: 'center', alignItems: 'center' }}>\n <SCardGrid size={{ sm: 5, md: 4, lg: 3 }}>\n <div>\n <img src={props.imagem} alt='E-mail confirmado' style={{ width: '150px' }} />\n </div>\n\n <div style={{ display: 'flex' }}>\n <Typography variant='bodyXL' align='center'>\n E-mail {props.tipo === 'empresa' ? 'da' : 'do'} {props.tipo}\n <br />\n alterado com sucesso!\n </Typography>\n </div>\n\n <div>\n <Button size='large' onClick={props.onSubmit}>\n Continuar para o sistema\n </Button>\n </div>\n </SCardGrid>\n </SBody>\n </NotificationProvider>\n );\n}\n","import { css, styled } from '@mui/material';\n\nimport { Paper, type PaperProps } from '@mui/material';\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface SPaperProps extends PaperProps {\n centerContent?: boolean;\n height?: string;\n}\n\nexport const SPaper = styled(Paper)<SPaperProps>`\n background-color: ${colorPalette.neutral[0]};\n box-shadow: 0px 3px 12px rgba(0, 0, 0, 0.12);\n border-radius: 8px;\n padding: 1.5rem;\n\n height: ${({ height }) => height};\n\n ${({ centerContent }) =>\n !!centerContent &&\n css`\n display: flex;\n justify-content: center;\n align-items: center;\n `}\n\n @media(max-width: 600px) {\n padding: 1rem;\n box-shadow: none;\n }\n`;\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { type FormEventHandler, useCallback } from 'react';\nimport { useFieldArray, useForm } from 'react-hook-form';\nimport { useApi } from '../../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../../context/notificationProvider';\nimport type {\n AlterarEmailCobrancaDialogFormValues,\n AlterarEmailCobrancaDialogProps,\n} from './alterarEmailCobrancaDialog.types';\n\nexport const useAlterarEmailCobrancaDialog = ({ onClose }: AlterarEmailCobrancaDialogProps) => {\n const api = useApi();\n const queryClient = useQueryClient();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n\n const { setNotification, handleErrors } = useNotificationContext();\n\n const atualizarEmailCobrancaMutation = useMutation({\n ...api.atualizarEmailCobrancas(),\n onSuccess() {\n onClose();\n setNotification({\n title: 'Email de cobrança atualizado com sucesso!',\n variant: 'success',\n });\n },\n onError: handleErrors.bind(null),\n });\n\n const form = useForm<AlterarEmailCobrancaDialogFormValues>({\n async defaultValues() {\n const emails: AlterarEmailCobrancaDialogFormValues['emails'] = [];\n\n const response = await queryClient.ensureQueryData(api.buscarMeusDados());\n\n response.data.data.emailCobranca?.split(';').map((email) => {\n emails.push({ email: email.trim() });\n });\n\n return { emails };\n },\n });\n const { fields, remove, append } = useFieldArray({\n name: 'emails',\n control: form.control,\n });\n\n const maxFields = fields.length === 3;\n\n const handleFormSubmit: FormEventHandler = useCallback(\n async (e) => {\n return form.handleSubmit(async (values) => {\n const emails = values.emails.map((it) => it.email).join(';');\n await atualizarEmailCobrancaMutation.mutateAsync({ emails });\n await meusDadosQuery.refetch();\n })(e);\n },\n [form.handleSubmit, atualizarEmailCobrancaMutation.mutateAsync, meusDadosQuery.refetch],\n );\n\n const emailUnico = (index: number) => {\n return {\n validate: {\n ['emailUnico']: (value: string) => {\n const emails = form.getValues('emails');\n const emailsRepetidos = emails.filter((it) => !!it.email && it.email === value);\n\n if (emailsRepetidos.length > 1) {\n if (index === emails.findLastIndex((it) => it.email === value)) {\n return 'E-mail já inserido';\n }\n }\n },\n },\n };\n };\n\n return {\n fields,\n remove,\n append,\n maxFields,\n handleFormSubmit,\n emailUnico,\n form,\n };\n};\n","import type { FC } from 'react';\n\nimport { Dialog, IconButton, LIcon } from '@s_mart/core';\nimport { TextField } from '@s_mart/form';\nimport { lineTrashAlt } from '@s_mart/regular-icons';\nimport { composeValidators, email, requiredWithTrim } from '@s_mart/rules';\nimport { linePlus } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Button, InputAdornment, Skeleton, Typography } from '@mui/material';\nimport { FormProvider } from 'react-hook-form';\n\nimport type { AlterarEmailCobrancaDialogProps } from './alterarEmailCobrancaDialog.types';\nimport { useAlterarEmailCobrancaDialog } from './useAlterarEmailCobrancaDialog';\n\nconst AlterarEmailCobrancaDialog: FC<AlterarEmailCobrancaDialogProps> = ({ onClose }) => {\n const { append, fields, remove, maxFields, form, handleFormSubmit, emailUnico } =\n useAlterarEmailCobrancaDialog({\n onClose,\n });\n\n return (\n <Dialog open fullWidth closeIcon disableBackdropClick onClose={onClose}>\n <FormProvider {...form}>\n <form onSubmit={handleFormSubmit}>\n <Dialog.Header>E-mails para recebimento dos boletos</Dialog.Header>\n\n <Dialog.Content>\n {form.formState.isLoading ? (\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Skeleton height='3rem' />\n <Skeleton height='3rem' />\n </div>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {fields.map((field, index) => (\n <div key={field.id} style={{ display: 'flex', gap: '0.5rem' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '0 0.8rem',\n borderRadius: '4px',\n color: colorPalette.neutral[0],\n backgroundColor: colorPalette.neutral[100],\n }}\n >\n <Typography variant='bodyXS'>{index + 1}</Typography>\n </div>\n\n <div style={{ flex: 1 }}>\n <TextField\n name={`emails.${index}.email`}\n placeholder='Informe o e-mail'\n required\n rules={composeValidators([\n requiredWithTrim,\n email,\n emailUnico(index) as any,\n ])}\n autoComplete='on'\n slotProps={{\n htmlInput: {\n //utilizado o name dentro da htmlInput para aparecer as opções do autoComplete\n name: 'pesquisar',\n },\n input: {\n endAdornment: index > 0 && (\n <InputAdornment position='end'>\n <IconButton onClick={() => remove(index)} variant='text'>\n <LIcon\n size='24px'\n icon={lineTrashAlt}\n color={colorPalette.neutral[100]}\n />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n />\n </div>\n </div>\n ))}\n\n {!maxFields && (\n <Button\n color='neutral'\n variant='dashed'\n fullWidth\n onClick={() => append({ email: '' })}\n startIcon={\n <LIcon removeMargin icon={linePlus} color={colorPalette.neutral[100]} />\n }\n >\n Adicionar outro e-mail\n </Button>\n )}\n </div>\n )}\n </Dialog.Content>\n\n <Dialog.Footer>\n <Button variant='neutral' onClick={onClose}>\n Cancelar\n </Button>\n\n <Button type='submit' disabled={!form.formState.isDirty}>\n Salvar\n </Button>\n </Dialog.Footer>\n </form>\n </FormProvider>\n </Dialog>\n );\n};\n\nexport default AlterarEmailCobrancaDialog;\n","import { Grid, Paper, Typography } from '@mui/material';\n\nimport { useMinhaContaStore } from '../../../../context/minhaContaProvider';\n\nexport function EmptyState() {\n const faturasEmptyStateImg = useMinhaContaStore((state) => state.meuPlano.faturasEmptyStateImg);\n\n return (\n <Paper elevation={2} sx={{ padding: '1rem', borderRadius: '.5rem' }}>\n <Grid\n container\n spacing={2}\n sx={{ flexDirection: 'column', justifyContent: 'center', alignItems: 'center', minHeight: '25rem' }}\n >\n {!!faturasEmptyStateImg && (\n <Grid>\n <img src={faturasEmptyStateImg} />\n </Grid>\n )}\n\n <Grid sx={{\n textAlign: 'center'\n }}>\n <Typography variant='titleMD'>Nenhuma fatura para mostrar</Typography>\n </Grid>\n\n <Grid>\n <Typography variant='bodyMD'>Você não possui faturas.</Typography>\n </Grid>\n </Grid>\n </Paper>\n );\n}\n","import { Button, Chip, Tooltip, Typography } from '@mui/material';\nimport type { GridColDef } from '@mui/x-data-grid';\nimport { LIcon } from '@s_mart/core';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { lineInfoCircle } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\nimport { downloadFile } from '@s_mart/utils';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { useCallback, useMemo } from 'react';\nimport { useApi, useMinhaContaStore } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { ItemListarCobrancasResponse } from '../../../helpers/contrateApi/meusDadosApi.types';\nimport { useAppStore } from '../../../store/app/useAppStore';\n\ndayjs.extend(utc);\n\ntype Acao = {\n label: string;\n onClick: () => void;\n variant: 'contained' | 'outlined' | 'text';\n};\n\nconst useFaturas = () => {\n const { handleErrors } = useNotificationContext();\n const setLoading = useAppStore((state) => state.setLoading);\n\n const exibirAbrirFatura = useMinhaContaStore((s) => s.meuPlano.exibirAbrirFatura);\n\n const queryClient = useQueryClient();\n const api = useApi();\n const minhaEmpresaQuery = useQuery(api.buscarMeusDados());\n const cobrancasQuery = useQuery({\n ...api.listarCobrancas(),\n select: (response) => response.data.data.toReversed(),\n });\n\n const emailCobranca = minhaEmpresaQuery.data?.data.data.emailCobranca;\n const cobrancas = cobrancasQuery.data;\n\n const listaEmailsCobranca = useMemo(() => {\n if (emailCobranca) {\n const emailArray = emailCobranca.split(';');\n const total = emailArray.length - 1;\n\n return `${emailArray[0]} ${total > 0 ? `e mais ${total}` : ''}`;\n }\n }, [emailCobranca]);\n\n // const { isFetching: loading, data: cobrancas } = useFetchCobrancas();\n\n const tableStatus = useMemo(() => {\n let status: 'loading' | 'empty' | null = null;\n\n if (cobrancasQuery.isFetching) {\n status = 'loading';\n } else if (cobrancas && !cobrancas.length) {\n status = 'empty';\n } else {\n status = null;\n }\n\n return status;\n }, [cobrancasQuery.isFetching, cobrancas]);\n\n const getSituacao = useCallback((row: ItemListarCobrancasResponse) => {\n switch (row.situacao) {\n case 'EMITIDO': {\n // Converte as 2 datas em UTC pra não dar pau na comparação\n const today = dayjs().startOf('day');\n let dataVencimento = dayjs(row.dataVencimento?.replace('Z', '')).startOf('day'); // Tira o \"Z\" pois não está realmente em UTC\n\n if (today.isAfter(dataVencimento)) {\n if (dayjs(dataVencimento).day() === 6)\n dataVencimento = dataVencimento.add(2, 'd'); // Sábado\n else if (dayjs(dataVencimento).day() === 0) dataVencimento = dataVencimento.add(1, 'd'); // Domingo\n }\n\n if (today.isAfter(dataVencimento)) {\n return { label: 'Vencida', color: colorPalette.red[100] };\n } else {\n return { label: 'A pagar', color: colorPalette.neutral[30] };\n }\n }\n case 'LIQUIDADO': {\n return { label: 'Paga', color: colorPalette.green[100] };\n }\n case 'ISENTADO': {\n return { label: 'Isenta', color: colorPalette.neutral[50] };\n }\n default: {\n return { label: '', color: colorPalette.neutral[0] };\n }\n }\n }, []);\n\n const handleFetchBoleto = useCallback(\n async (row: ItemListarCobrancasResponse) => {\n try {\n setLoading(true);\n\n const res = await queryClient.ensureQueryData(api.buscarBoleto(row.identificador));\n\n if (res.data.data.boleto)\n downloadFile(\n res.data.data.boleto,\n `Boleto_${dayjs(row.dataEmissao).format('YYYY[_]MM')}.pdf`,\n 'application/pdf',\n );\n } catch (err) {\n handleErrors(err);\n } finally {\n setLoading(false);\n }\n },\n [setLoading, handleErrors, queryClient.ensureQueryData, api.buscarBoleto],\n );\n\n const handleFetchNfse = useCallback(\n async (row: ItemListarCobrancasResponse) => {\n try {\n setLoading(true);\n\n const res = await queryClient.ensureQueryData(api.buscarNfse(row.identificador));\n\n if (res.data.data) {\n if (res.data.data.xml)\n downloadFile(\n res.data.data.xml,\n `Nota_XML_${dayjs(row.dataEmissao).format('YYYY[_]MM')}.xml`,\n 'text/xml',\n );\n\n if (res.data.data.danfse) {\n downloadFile(\n res.data.data.danfse,\n `Nota_PDF_${dayjs(row.dataEmissao).format('YYYY[_]MM')}.pdf`,\n 'application/pdf',\n );\n } else if (res.data.data.link_impressao_danfse) {\n window.open(\n res.data.data.link_impressao_danfse,\n '_blank',\n 'noopener=yes,noreferrer=yes',\n );\n }\n }\n } catch (err) {\n handleErrors(err);\n } finally {\n setLoading(false);\n }\n },\n [queryClient.ensureQueryData, setLoading, handleErrors, api.buscarNfse],\n );\n const abrirFatura = useCallback((row: ItemListarCobrancasResponse) => {\n const link = window.location.host.includes('staging')\n ? row.linkFatura.replace('app', 'staging')\n : row.linkFatura;\n window.open(link, '_blank', 'noreferrer=yes,noopener=yes');\n }, []);\n\n const getActions = useCallback(\n (row: ItemListarCobrancasResponse): Acao[] => {\n switch (row.situacao) {\n case 'EMITIDO': {\n if (exibirAbrirFatura) {\n return [\n { label: 'Ver e pagar fatura', variant: 'contained', onClick: () => abrirFatura(row) },\n ];\n }\n\n return [{ label: 'Baixar boleto', variant: 'text', onClick: () => handleFetchBoleto(row) }];\n }\n case 'LIQUIDADO': {\n const acoes: Acao[] = [];\n if (row.linkFatura) {\n acoes.push({ label: 'Ver fatura', variant: 'outlined', onClick: () => abrirFatura(row) });\n }\n acoes.push({ label: 'Baixar nota', variant: 'text', onClick: () => handleFetchNfse(row) });\n return acoes;\n }\n default:\n return [];\n }\n },\n [handleFetchBoleto, handleFetchNfse, abrirFatura, exibirAbrirFatura],\n );\n\n const tableColumns = useMemo(\n (): GridColDef<ItemListarCobrancasResponse>[] => [\n {\n field: 'dataVencimento',\n headerName: 'Vencimento',\n flex: 2,\n minWidth: 100,\n valueFormatter: (value: ItemListarCobrancasResponse['dataVencimento']) =>\n dayjs(value).utc().format('DD/MM/YYYY'),\n },\n {\n field: 'situacao',\n headerName: 'Situação',\n flex: 2,\n minWidth: 105,\n valueGetter: (\n _: ItemListarCobrancasResponse['situacao'],\n row: ItemListarCobrancasResponse,\n ) => getSituacao(row),\n renderCell: ({ value }) => (\n <Chip label={value.label} style={{ backgroundColor: value.color, minWidth: '6.5rem' }} />\n ),\n },\n {\n field: 'descricao',\n headerName: 'Ref',\n renderCell: ({ value }) => (\n <Tooltip title={<Typography variant='bodySM'>{value}</Typography>}>\n <div>\n <LIcon icon={lineInfoCircle} color={colorPalette.neutral[100]} />\n </div>\n </Tooltip>\n ),\n width: 70,\n },\n {\n field: 'valor',\n headerName: 'Valor',\n flex: 1.5,\n minWidth: 130,\n renderCell: ({ formattedValue }) => (\n <Typography variant='titleXS'>{formattedValue}</Typography>\n ),\n valueFormatter: (value: ItemListarCobrancasResponse['valor']) => valorMask.format(value),\n },\n {\n field: 'acao',\n headerName: 'Ações',\n flex: 1.5,\n minWidth: 230,\n align: 'center',\n headerAlign: 'center',\n renderCell: ({ value }) => (\n <div\n style={{\n display: 'flex',\n gap: '0.5rem',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n }}\n >\n {(value as Acao[])?.map((acao) => (\n <Button\n key={acao.label}\n size='small'\n color={acao.variant === 'text' ? 'neutral' : undefined}\n variant={acao.variant}\n onClick={acao.onClick}\n sx={{ textDecoration: acao.variant === 'text' ? 'underline' : undefined }}\n >\n {acao.label}\n </Button>\n ))}\n </div>\n ),\n valueGetter: (value: never, row: ItemListarCobrancasResponse) => getActions(row),\n },\n ],\n [getActions, getSituacao],\n );\n\n return {\n cobrancas,\n tableStatus,\n tableColumns,\n listaEmailsCobranca,\n getActions,\n getSituacao,\n loading: cobrancasQuery.isFetching,\n };\n};\n\nexport default useFaturas;\n","export interface BuscarMeusDadosResponse {\n alteracaoDoEmailDaEmpresa: {\n data_expiracao: string;\n novo_email: string;\n } | null;\n alteracaoDoEmailDoResponsavel: {\n data_expiracao: string;\n novo_email: string;\n } | null;\n bairro: string | null;\n cep: string | null;\n cidade: string | null;\n codigoCidade: number | null;\n complemento: string | null;\n cpfCnpj: string | null;\n dataBloqueio: string | null;\n dataContratacao: string | null;\n dataInativacao: string | null;\n email: string | null;\n emailCobranca: string | null;\n emailResponsavel: string | null;\n exibirAbaMeuPlano: boolean | null;\n fone: string | null;\n foneResponsavel: string | null;\n funruralDescricao: string | null;\n funruralTipo: number | null;\n ie: string | null;\n logotipo: {\n conteudo: string;\n mimetype: string;\n nome: string;\n tamanho: number;\n } | null;\n motivoInativacao: string | null;\n nomeFantasia: string | null;\n nomeResponsavel: string | null;\n numero: string | null;\n razaoSocial: string | null;\n regimeTributario: number | null;\n rntrc: string | null;\n rntrcDataVencimento: string | null;\n rua: string | null;\n situacao: number | null;\n tipoPessoa: number | null;\n uf: string | null;\n}\n\nexport interface AtualizarMeusDadosBody {\n bairro: string;\n cep: string;\n codigoCidade: number;\n complemento: string;\n email: string;\n emailResponsavel: string;\n fone: string;\n foneResponsavel: string;\n funruralRescricao: string;\n funruralTipo: number;\n ie: string;\n logotipo: {\n conteudo: string;\n nome: string;\n mimetype: string;\n tamanho: number;\n };\n nomeFantasia: string;\n nomeResponsavel: string;\n numero: string;\n razaoSocial: string;\n regimeTributario: number;\n rntrc: string;\n rntrcDataVencimento: string;\n rua: string;\n}\n\nexport interface MeuPlanoRecursosResponse {\n codigoGrupo: number | null;\n codigoPlano: number | null;\n dataContratacao: string | null;\n descricaoPlano: string | null;\n diaVencimentoBoleto: number | null;\n diasCarencia: number | null;\n nomePlano: string | null;\n observacaoPlano: number | null;\n periodicidade: Periodicidade | null;\n qtdeBilhetagem: number | null;\n recursos: IMeuPlanoRecurso[] | null;\n tipoAcesso: number | null;\n tipoCobranca: TipoCobranca | null;\n valor: number | null;\n codigoPlanoEmpresa: number | null;\n valorBilhetagem: number | null;\n bilhetagemExcedenteAtiva: number | null;\n dataInicioUltimaFatura: string | null;\n dataFimUltimaFatura: string | null;\n}\n\nexport interface IMeuPlanoRecurso {\n caminhoImagem: string;\n codigoRecurso: number;\n dataContratacaoRecurso: string;\n dataExclusaoRecurso: string | null;\n dataSolicitacaoExcRecurso: string | null;\n descricaoRecurso: string;\n nomeRecurso: string;\n recursoContratado: boolean;\n slugRecurso: string;\n valorRecurso: number;\n}\n\nexport interface ItemListarCobrancasResponse {\n dataBaixa: string | null;\n dataEmissao: string;\n dataPagamento: string | null;\n dataVencimento: string | null;\n descricao: string | null;\n linkFatura: string;\n formaPagamento: 1 | 3; // 1-Boleto ; 3-Cartão de crédito\n identificador: string;\n nfseEmitida: 1 | 0;\n observacaoInterna: string | null;\n situacao: CobrancaSituacao;\n valor: number;\n}\n\nexport type CobrancaSituacao = 'EMITIDO' | 'LIQUIDADO' | 'BAIXADO' | 'ISENTADO';\n\nexport interface BuscarBoletoResponse {\n boleto: string;\n}\n\nexport interface BuscarNfseResponse {\n danfse?: string;\n link_impressao_danfse: string;\n xml: string;\n}\n\nexport interface BuscarPlanoPayload {\n path: { codigo: number };\n params: { periodicidade: Periodicidade };\n}\n\nexport enum TipoCobranca {\n PRE_PAGO = 1,\n POS_PAGO = 2,\n}\n\nexport enum Periodicidade {\n MENSAL = 0,\n TRIMESTRAL = 1,\n SEMESTRAL = 2,\n ANUAL = 3,\n}\n\nexport enum TipoAcesso {\n PUBLICO = 0,\n PRIVADO = 1,\n}\n\nexport interface BuscarPlanoResponse {\n codigo: number;\n nome: string;\n recursos: IPlanoRecurso[];\n valores: {\n codigoValor: number;\n periodicidade: Periodicidade;\n tipoCobranca: TipoCobranca;\n valor: number;\n }[];\n}\n\nexport interface IPlanoRecurso {\n codigoRecurso: string;\n nomeRecurso: string;\n slugRecurso: string;\n valorRecurso: number;\n}\n\nexport interface AlterarPlanoPayload {\n codigoPlano: number;\n codigoPlanoValor: number;\n}\n\nexport interface AtualizarEmailsCobrancaBody {\n emails: string;\n}\n","import { useMemo } from 'react';\n\nimport { useQuery } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { TipoCobranca } from '../../../helpers/contrateApi/meusDadosApi.types';\n\ndayjs.extend(utc);\n\nexport const useProximaFatura = () => {\n const api = useApi();\n const meuPlanoRecursosQuery = useQuery(api.buscarMeuPlanoRecursos());\n const cobrancasQuery = useQuery(api.listarCobrancas());\n const minhaEmpresaQuery = useQuery(api.buscarMeusDados());\n\n const cobrancas = cobrancasQuery.data?.data.data;\n const meuPlanoRecursos = meuPlanoRecursosQuery.data?.data.data;\n const minhaEmpresa = minhaEmpresaQuery.data?.data.data;\n\n return useMemo(() => {\n if (!cobrancas || !meuPlanoRecursos?.dataFimUltimaFatura) return null;\n let proximoVencimento = dayjs(meuPlanoRecursos?.dataFimUltimaFatura).utc().startOf('day');\n\n if (meuPlanoRecursos.tipoCobranca === TipoCobranca.POS_PAGO) {\n proximoVencimento = proximoVencimento.add(1, 'month').startOf('month');\n }\n\n if (minhaEmpresa?.dataBloqueio && dayjs().isAfter(proximoVencimento)) {\n if (meuPlanoRecursos.tipoCobranca === TipoCobranca.POS_PAGO) return null;\n\n return (\n <>\n <b>Próxima fatura</b>: será gerada em até 24 horas após o pagamento da fatura em atraso\n </>\n );\n }\n\n if (proximoVencimento.day() === 5) {\n // Sexta-feira\n proximoVencimento = proximoVencimento.set('hour', 12);\n } else {\n proximoVencimento = proximoVencimento.set('hour', 19);\n }\n\n return (\n <>\n <b>Próxima fatura</b>: será gerada em {proximoVencimento.format('DD/MM/YYYY[, às ]HH:mm')}\n </>\n );\n }, [cobrancas, meuPlanoRecursos, minhaEmpresa?.dataBloqueio]);\n};\n","import { useState } from 'react';\n\nimport { IconButton, LIcon } from '@s_mart/core';\nimport { DataTable, List } from '@s_mart/data';\nimport { valor as valorMask } from '@s_mart/masks';\nimport { lineClock, lineReceipt } from '@s_mart/regular-icons';\nimport { linePen } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport {\n Alert,\n Button,\n Card,\n Chip,\n CircularProgress,\n Grid,\n Typography,\n useMediaQuery,\n} from '@mui/material';\nimport dayjs from 'dayjs';\n\nimport { SPaper } from '../../../shared/styles';\nimport AlterarEmailCobrancaDialog from './alterarEmailCobrancaDialog/alterarEmailCobrancaDialog';\nimport { EmptyState } from './emptyState/emptyState';\nimport useFaturas from './useFaturas';\nimport { useProximaFatura } from './useProximaFatura';\n\nexport function Faturas() {\n const {\n cobrancas,\n tableStatus,\n tableColumns,\n listaEmailsCobranca,\n getActions,\n getSituacao,\n loading,\n } = useFaturas();\n const proximaFatura = useProximaFatura();\n\n const [openAlterarEmailCobrancaDialog, setOpenAlterarEmailCobrancaDialog] = useState(false);\n const mobileList = useMediaQuery('(max-width: 700px)');\n\n if (loading) {\n return (\n <SPaper centerContent height='60vh'>\n <CircularProgress />\n </SPaper>\n );\n }\n\n if (tableStatus === 'empty') return <EmptyState />;\n\n return (\n <>\n <Card sx={{ padding: '1rem' }}>\n <Grid container spacing={2}>\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center' }}>\n <LIcon icon={lineReceipt} size='25px' />\n <Typography variant='titleSM'>Gerenciamento de faturas</Typography>\n </Grid>\n\n <Grid size={12} sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Typography variant='bodySM'>\n Boletos enviados para: {mobileList && <br />} <strong>{listaEmailsCobranca}</strong>\n </Typography>\n <IconButton\n size='small'\n variant='neutral'\n onClick={() => setOpenAlterarEmailCobrancaDialog(true)}\n >\n <LIcon icon={linePen} size='21px' removeMargin />\n </IconButton>\n </Grid>\n\n {!!proximaFatura && (\n <Grid size={12}>\n <Alert color='info' icon={<LIcon size='21px' removeMargin icon={lineClock} />}>\n <Typography color='info'>{proximaFatura}</Typography>\n </Alert>\n </Grid>\n )}\n {mobileList ? (\n <Grid size={12}>\n <List.Root data={cobrancas ?? []} isLoading={tableStatus === 'loading'}>\n {cobrancas?.map((fatura, index) => {\n const situacao = getSituacao(fatura);\n const action = getActions(fatura);\n const vencida = situacao.label === 'Vencida';\n\n return (\n <List.ListItem\n key={fatura.identificador || fatura.dataVencimento}\n index={index}\n style={{\n width: 'calc(100% + 2rem)',\n marginLeft: '-1rem',\n padding: '1.5rem 1rem',\n backgroundColor: vencida ? '#FFE3E3' : undefined,\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Chip\n label={situacao.label}\n size='small'\n style={{ backgroundColor: situacao.color, minWidth: '6.5rem' }}\n />\n\n <Typography\n variant='bodySM'\n sx={{ color: vencida ? colorPalette.red[300] : undefined }}\n >\n {dayjs(fatura.dataVencimento).format('DD/MM/YYYY')}\n </Typography>\n </div>\n\n <div style={{ margin: '0.75rem 0' }}>\n <Typography\n variant='bodyXS'\n sx={{\n color: vencida ? colorPalette.neutral[500] : colorPalette.neutral[100],\n }}\n >\n {fatura.descricao}\n </Typography>\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography\n variant='titleXS'\n sx={{ color: vencida ? colorPalette.red[300] : undefined }}\n >\n {valorMask.format(fatura.valor)}\n </Typography>\n\n <div style={{ display: 'flex', gap: '0.75rem', alignItems: 'center' }}>\n {action.map((acao) =>\n acao.variant === 'text' ? (\n <Typography\n key={acao.label}\n variant='bodySM'\n style={{ textDecorationLine: 'underline', cursor: 'pointer' }}\n onClick={acao.onClick}\n sx={{\n color: vencida ? colorPalette.red[300] : undefined,\n fontWeight: vencida ? 700 : undefined,\n }}\n >\n {acao.label}\n </Typography>\n ) : (\n <Button\n key={acao.label}\n size='small'\n variant={acao.variant}\n onClick={acao.onClick}\n >\n {acao.label}\n </Button>\n ),\n )}\n </div>\n </div>\n </List.ListItem>\n );\n })}\n </List.Root>\n </Grid>\n ) : (\n <Grid\n size={12}\n sx={{\n overflow: 'auto',\n maxHeight: '65vh',\n '@media(max-height: 750px)': { maxHeight: '60vh' },\n }}\n >\n <DataTable\n rows={cobrancas ?? []}\n loading={tableStatus === 'loading'}\n columns={tableColumns}\n getRowId={(row) => row.identificador || row.dataVencimento!}\n disableRowSelectionOnClick\n resizeThrottleMs={1000}\n />\n </Grid>\n )}\n </Grid>\n </Card>\n\n {openAlterarEmailCobrancaDialog && (\n <AlterarEmailCobrancaDialog onClose={() => setOpenAlterarEmailCobrancaDialog(false)} />\n )}\n </>\n );\n}\n","import { Grid, Typography } from '@mui/material';\nimport { LIcon } from '@s_mart/core';\nimport { lineExternalLink } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\ninterface TermosDeUsoProps {\n link: string;\n}\n\nexport function TermosDeUso({ link }: TermosDeUsoProps) {\n return (\n <Grid sx={{ display: 'flex', marginTop: '1.5rem' }}>\n <a\n href={link}\n rel='noopener noreferrer'\n target='_blank'\n style={{ display: 'flex', alignItems: 'center', color: colorPalette.neutral[100] }}\n >\n <Typography variant='bodySM'>Termos de uso</Typography>\n <LIcon icon={lineExternalLink} />\n </a>\n </Grid>\n );\n}\n","import { useEffect } from 'react';\n\nimport { useMinhaContaStore } from '../../context/minhaContaProvider';\n\nconst useMeuPlano = () => {\n const linkTermosDeUso = useMinhaContaStore((state) => state.meuPlano.linkTermosDeUso);\n const onRenderTabMeuPlano = useMinhaContaStore((state) => state.meuPlano.onRenderTabMeuPlano);\n const esconderInformacoesPlano = useMinhaContaStore((state) => state.meuPlano.esconderInformacoesPlano);\n\n useEffect(() => {\n onRenderTabMeuPlano?.();\n }, [onRenderTabMeuPlano]);\n\n return { linkTermosDeUso, esconderInformacoesPlano };\n};\n\nexport default useMeuPlano;\n","import { Grid, Paper } from '@mui/material';\nimport { memo, useState } from 'react';\nimport { MeuPlanoInfo } from '../../components/meuPlanoInfo/meuPlanoInfo';\nimport { PlanosDialog } from '../../components/planosDialog/planosDialog';\nimport { RecursosDialog } from '../../components/recursosDialog/recursosDialog';\nimport { useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { Faturas } from './faturas/faturas';\nimport { TermosDeUso } from './termosDeUso/termosDeUso';\nimport useMeuPlano from './useMeuPlano';\n\nfunction MeuPlanoComp() {\n const { linkTermosDeUso, esconderInformacoesPlano } = useMeuPlano();\n const [openDialog, setOpenDialog] = useState<'recursos' | 'planos' | null>(null);\n\n const esconderPlanos = useMinhaContaStore((state) => state.meuPlano.esconderPlanos);\n const esconderLojaDeRecursos = useMinhaContaStore((state) => state.meuPlano.esconderLojaDeRecursos);\n\n return (\n <>\n <Paper elevation={2} sx={{ padding: '1rem' }}>\n <Grid container spacing={4}>\n {!esconderInformacoesPlano && (\n <Grid size={{ xs: 12, md: 5, lg: 4, xl: 3 }}>\n <MeuPlanoInfo\n onClickButtonPlanos={() => setOpenDialog('planos')}\n onClickButtonLojaRecursos={() => setOpenDialog('recursos')}\n exibirLojaRecursos={!esconderLojaDeRecursos}\n exibirPlanos={!esconderPlanos}\n />\n\n {!!linkTermosDeUso && <TermosDeUso link={linkTermosDeUso} />}\n </Grid>\n )}\n\n <Grid size={{ xs: 12, md: 7, lg: 8, xl: 6 }}>\n <Faturas />\n </Grid>\n </Grid>\n </Paper>\n\n {openDialog === 'recursos' && <RecursosDialog onClose={() => setOpenDialog(null)} />}\n {openDialog === 'planos' && <PlanosDialog onClose={() => setOpenDialog(null)} />}\n </>\n );\n}\n\nexport const MeuPlano = memo(MeuPlanoComp);\n","import { styled } from '@mui/material';\nimport { Typography } from '@mui/material';\n\nexport const SHelperRNTRC = styled(Typography)`\n color: ${(props) => props?.theme?.palette?.primary?.main};\n cursor: pointer;\n\n a {\n text-decoration: none;\n color: ${(props) => props?.theme?.palette?.primary?.main};\n }\n`;\n","import { useCallback } from 'react';\n\nimport { useIsFetching, useQuery, useQueryClient } from '@tanstack/react-query';\nimport dayjs from 'dayjs';\nimport { useFormContext } from 'react-hook-form';\n\nimport { useApi, useMinhaContaStore, useSlotPropsStore } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { MinhaEmpresaFormValues } from '../minhaEmpresa.types';\n\nconst defaultSlotProps = {};\nconst useDadosEmpresa = () => {\n const camposAdicionais = useMinhaContaStore((state) => state.minhaEmpresa.camposAdicionais);\n const textFieldSlotPropsEmpresaEmail = useSlotPropsStore(\n (s) => s.textFieldEmpresaEmail ?? defaultSlotProps,\n );\n\n const queryClient = useQueryClient();\n const api = useApi();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n const dadosResponse = meusDadosQuery.data?.data.data;\n\n const empresaCnpj = dadosResponse?.cpfCnpj;\n const alteracaoDoEmailDaEmpresa = dadosResponse?.alteracaoDoEmailDaEmpresa;\n\n const { setValue, getValues } = useFormContext<MinhaEmpresaFormValues>();\n\n const { handleErrors, setNotification } = useNotificationContext();\n\n const buscandoRntrc = Boolean(\n useIsFetching({ queryKey: api.buscarRntrc(empresaCnpj!).queryKey }),\n );\n\n const onAtualizarRntrc = useCallback(async () => {\n if (buscandoRntrc || !empresaCnpj) return;\n\n try {\n const resp = await queryClient.ensureQueryData(api.buscarRntrc(empresaCnpj));\n\n if (resp?.data?.data?.rntrc) {\n const currentRntrc = getValues('empresa.rntrc');\n const rntrcDataVencimento = resp.data.data.data_validade\n ? dayjs(resp.data.data.data_validade, 'DD/MM/YYYY')\n : undefined;\n\n const rntrc = resp.data.data.rntrc.padStart(8, '0');\n\n setValue('empresa.rntrc', rntrc, { shouldDirty: true });\n setValue('empresa.rntrcDataVencimento', rntrcDataVencimento);\n\n if (rntrc === dadosResponse.rntrc && rntrc === currentRntrc) {\n setNotification({ title: 'Seu RNTRC já está atualizado', variant: 'info' });\n } else if (rntrc === currentRntrc) {\n setNotification({ title: 'O RNTRC já foi buscado', variant: 'info' });\n }\n } else {\n setNotification({ title: 'RNTRC não encontrado', variant: 'warning' });\n }\n } catch (error) {\n handleErrors(error);\n }\n }, [\n api.buscarRntrc,\n queryClient.ensureQueryData,\n buscandoRntrc,\n empresaCnpj,\n setValue,\n getValues,\n setNotification,\n handleErrors,\n dadosResponse?.rntrc,\n ]);\n\n return {\n onAtualizarRntrc,\n camposAdicionais,\n buscandoRntrc,\n alteracaoDoEmailDaEmpresa,\n textFieldSlotPropsEmpresaEmail,\n };\n};\n\nexport default useDadosEmpresa;\n","import { LIcon } from '@s_mart/core';\nimport { DatePicker, TextField } from '@s_mart/form';\nimport { composeValidators, cpfCnpj, email, maxLength, required, telefone } from '@s_mart/rules';\nimport { lineSync } from '@s_mart/solid-icons';\n\nimport { CircularProgress, Grid, Tooltip, Typography } from '@mui/material';\n\nimport { SHelperRNTRC } from './dadosEmpresa.styles';\nimport useDadosEmpresa from './useDadosEmpresa';\n\nexport function DadosEmpresa() {\n const {\n camposAdicionais,\n buscandoRntrc,\n onAtualizarRntrc,\n alteracaoDoEmailDaEmpresa,\n textFieldSlotPropsEmpresaEmail,\n } = useDadosEmpresa();\n\n return (\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant='titleSM'>Dados da empresa</Typography>\n\n {!!alteracaoDoEmailDaEmpresa && (\n <Tooltip\n placement='top-start'\n title={\n <Typography variant='titleXS'>\n Alteração de e-mail da empresa solicitada.\n <br /> Pendente a confirmação de e-mail.\n </Typography>\n }\n >\n <div style={{ display: 'inline' }}>\n <LIcon icon={lineSync} top='4px' />\n </div>\n </Tooltip>\n )}\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='empresa.cpfCnpj'\n label='CNPJ'\n mask='cpfCnpj'\n disabled\n required\n rules={composeValidators([required, cpfCnpj])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='empresa.razaoSocial'\n label='Razão social'\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='empresa.nomeFantasia'\n label='Nome fantasia'\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='empresa.email'\n label='E-mail da empresa'\n required\n rules={composeValidators([required, email])}\n {...textFieldSlotPropsEmpresaEmail}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='empresa.fone'\n label='Telefone da empresa'\n mask='telefone'\n required\n rules={composeValidators([required, telefone])}\n />\n </Grid>\n\n {camposAdicionais?.ie && (\n <Grid size={{ xs: 12, md: 4, ...camposAdicionais.ie.grid }}>\n <TextField\n name='empresa.ie'\n label='Inscrição estadual'\n required={camposAdicionais.ie.required}\n rules={camposAdicionais.ie.rules}\n mask='numero'\n />\n </Grid>\n )}\n\n {camposAdicionais?.rntrc && (\n <Grid size={{ xs: 12, sm: 6, md: 4, ...camposAdicionais.rntrc.grid }}>\n <TextField\n name='empresa.rntrc'\n label='RNTRC'\n mask='numero'\n disabled={buscandoRntrc}\n required={camposAdicionais.rntrc.required}\n rules={camposAdicionais.rntrc.rules}\n slotProps={{ htmlInput: { maxLength: 8 } }}\n />\n <SHelperRNTRC variant='bodyXXS' onClick={onAtualizarRntrc}>\n Buscar RNTRC\n {buscandoRntrc && (\n <CircularProgress size='0.5rem' thickness={5} style={{ marginLeft: '0.3rem' }} />\n )}\n </SHelperRNTRC>\n </Grid>\n )}\n\n {camposAdicionais?.rntrcVencimento && (\n <Grid size={{ xs: 12, sm: 6, md: 4, ...camposAdicionais.rntrcVencimento.grid }}>\n <DatePicker\n name='empresa.rntrcDataVencimento'\n label='Vencimento'\n disabled={buscandoRntrc}\n required={camposAdicionais.rntrcVencimento.required}\n rules={camposAdicionais.rntrcVencimento.rules}\n />\n <SHelperRNTRC variant='bodyXXS'>\n <a\n href='https://consultapublica.antt.gov.br/Site/ConsultaRNTRC.aspx/ConsultaPublica/'\n target='_blank'\n rel='noopener noreferrer'\n >\n Consultar site da ANTT\n </a>\n </SHelperRNTRC>\n </Grid>\n )}\n </Grid>\n );\n}\n","import { cep as cepValidator } from '@s_mart/rules';\nimport { useIsFetching, useQueryClient } from '@tanstack/react-query';\nimport debounce from 'lodash-es/debounce';\nimport { useCallback, useMemo, useState } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { AutocompleteOption } from '../../../shared/types';\nimport type { CidadeValue, MinhaEmpresaFormValues } from '../minhaEmpresa.types';\n\nconst useDadosEndereco = () => {\n const { getValues, setValue } = useFormContext<MinhaEmpresaFormValues>();\n const [cidades, setCidades] = useState<AutocompleteOption<CidadeValue>[]>([]);\n const { handleErrors } = useNotificationContext();\n const queryClient = useQueryClient();\n\n const api = useApi();\n\n const fetchingCep = Boolean(useIsFetching({ queryKey: api.buscarCep('').queryKey.slice(0, 2) }));\n\n const onChangeCep = useCallback(\n async (cep: string) => {\n const treatedCep = cep.replace(/\\D/g, '');\n\n if (treatedCep && !cepValidator.validate.cep(treatedCep) && treatedCep !== getValues('flags.ultimoCepBuscado')) {\n try {\n // Use ensureQueryData instead of fetchCep\n const resp = await queryClient.ensureQueryData(api.buscarCep(cep));\n\n if (resp.data.data.codigo_ibge)\n setValue('endereco.cidade', {\n label: `${resp.data.data.cidade}/${resp.data.data.uf}`,\n value: {\n codigo: resp.data.data.codigo_ibge,\n nome: resp.data.data.cidade,\n uf: resp.data.data.uf,\n },\n });\n if (resp.data.data.bairro) setValue('endereco.bairro', resp.data.data.bairro);\n if (resp.data.data.logradouro) setValue('endereco.rua', resp.data.data.logradouro);\n if (resp.data.data.complemento) setValue('endereco.complemento', resp.data.data.complemento);\n\n setValue('flags.ultimoCepBuscado', treatedCep);\n } catch (error) {\n console.error('Erro ao buscar CEP');\n console.error(error);\n }\n }\n },\n [getValues, queryClient.ensureQueryData, api.buscarCep, setValue],\n );\n\n const searchCidades = useCallback(\n async (search: string) => {\n try {\n const resp = await queryClient.ensureQueryData(api.pesquisarCidades(search));\n\n setCidades(\n resp.data?.data?.map((cidade) => ({\n label: `${cidade.nome}/${cidade.uf}`,\n value: { codigo: cidade.codigo, nome: cidade.nome, uf: cidade.uf },\n })),\n );\n } catch (error) {\n handleErrors(error);\n }\n },\n [api.pesquisarCidades, handleErrors, queryClient],\n );\n\n const onChangeInputCidades = useMemo(() => debounce(searchCidades, 500), [searchCidades]);\n\n const onFocusInputCidades = () => !cidades.length && searchCidades('');\n\n return { onChangeCep, fetchingCep, onChangeInputCidades, onFocusInputCidades, cidades };\n};\n\nexport default useDadosEndereco;\n","import { Creatable, TextField } from '@s_mart/form';\nimport { cep, composeValidators, maxLength, required } from '@s_mart/rules';\n\nimport { CircularProgress, Grid, Typography } from '@mui/material';\n\nimport useDadosEndereco from './useDadosEndereco';\n\nexport function DadosEndereco() {\n const { onChangeCep, fetchingCep, onChangeInputCidades, onFocusInputCidades, cidades } =\n useDadosEndereco();\n\n return (\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant='titleSM'>Endereço</Typography>\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.cep'\n label='CEP'\n mask='cep'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, cep])}\n onInputChange={onChangeCep}\n slotProps={{\n input: {\n endAdornment: fetchingCep && (\n <div style={{ display: 'flex' }}>\n <CircularProgress thickness={6} size='1.5rem' />\n </div>\n ),\n },\n }}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <Creatable\n name='endereco.cidade'\n label='Cidade/UF'\n options={cidades}\n onInputChange={onChangeInputCidades}\n onFocus={onFocusInputCidades}\n noOptionsText='Nenhuma cidade encontrada'\n disabled={fetchingCep}\n required\n rules={required}\n showCreatableButton={false}\n showEditableButton={false}\n getOptionKey={(opt) => opt.label}\n getOptionLabel={(opt) => opt.label}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.bairro'\n label='Bairro'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.rua'\n label='Rua'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.numero'\n label='Número'\n disabled={fetchingCep}\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 4 }}>\n <TextField\n name='endereco.complemento'\n label='Complemento'\n disabled={fetchingCep}\n rules={maxLength(60)}\n />\n </Grid>\n </Grid>\n );\n}\n","import { Grid, Tooltip, Typography } from '@mui/material';\nimport { LIcon } from '@s_mart/core';\nimport { TextField } from '@s_mart/form';\nimport { composeValidators, maxLength, required, telefone } from '@s_mart/rules';\nimport { lineSync } from '@s_mart/solid-icons';\nimport { useQuery } from '@tanstack/react-query';\nimport { useApi } from '../../../context/minhaContaProvider';\n\nexport function DadosResponsavel() {\n const api = useApi();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n const meusDadosResponse = meusDadosQuery.data?.data.data;\n\n const alteracaoDoEmailDoResponsavel = meusDadosResponse?.alteracaoDoEmailDoResponsavel;\n\n return (\n <Grid container spacing={2}>\n <Grid size={12}>\n <Typography variant='titleSM'>Dados do responsável</Typography>\n\n {!!alteracaoDoEmailDoResponsavel && (\n <Tooltip\n placement='top-start'\n title={\n <Typography variant='titleXS'>\n Alteração de responsável solicitada.\n <br /> Pendente a confirmação de e-mail.\n </Typography>\n }\n >\n <div style={{ display: 'inline' }}>\n <LIcon icon={lineSync} top='4px' />\n </div>\n </Tooltip>\n )}\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='responsavel.nome'\n label='Nome do responsável'\n required\n rules={composeValidators([required, maxLength(60)])}\n />\n </Grid>\n\n <Grid size={{ xs: 12, md: 6 }}>\n <TextField\n name='responsavel.fone'\n label='Telefone do responsável'\n mask='telefone'\n required\n rules={composeValidators([required, telefone])}\n />\n </Grid>\n </Grid>\n );\n}\n","import { createResizedImage } from '@s_mart/utils';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useDropzone } from 'react-dropzone';\nimport { useFormContext, useWatch } from 'react-hook-form';\n\nimport { useApi } from '../../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../../context/notificationProvider';\nimport type { MinhaEmpresaFormValues } from '../minhaEmpresa.types';\n\nexport const useHeader = () => {\n const { open, getInputProps } = useDropzone({\n noKeyboard: true,\n multiple: false,\n accept: {\n 'image/jpeg': ['.jpeg', '.jpg'],\n 'image/png': ['.png'],\n },\n onDrop,\n });\n const api = useApi();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n\n const meusDadosResponse = meusDadosQuery.data?.data.data;\n\n const empresaNomeFantasia = meusDadosResponse?.nomeFantasia;\n const empresaRazaoSocial = meusDadosResponse?.razaoSocial;\n const { setNotification } = useNotificationContext();\n const {\n setValue,\n formState: { isDirty, isSubmitting },\n control,\n } = useFormContext<MinhaEmpresaFormValues>();\n\n const logo = useWatch({ control, name: 'logo' });\n\n const redimensionarArquivo = (file: File) =>\n new Promise((resolve) => {\n createResizedImage(\n file,\n 300,\n 600,\n 'JPEG',\n 100,\n 0,\n (uri) => {\n resolve(uri);\n },\n 'file',\n );\n });\n\n async function onDrop(files: File[]) {\n const arquivo = files?.[0];\n\n if (!arquivo)\n return setNotification({\n title: 'Selecione um arquivo válido',\n message: 'Formatos válidos: PNG, JPG e JPEG',\n variant: 'warning',\n duration: 10000,\n });\n if (!arquivo.type.startsWith('image/'))\n return setNotification({ title: 'Formato de imagem inválido', variant: 'warning' });\n if (arquivo.size > 200000)\n return setNotification({\n title: 'Arquivo muito grande (máximo 200kB)',\n variant: 'warning',\n duration: 5000,\n });\n\n const arquivoRedimensionado = (await redimensionarArquivo(arquivo)) as File;\n\n const reader = new FileReader();\n\n reader.onload = () => {\n if (!reader.result) return console.log('Ocorreu um erro ao ler o arquivo');\n\n setValue(\n 'logo',\n {\n conteudo: reader.result\n ?.toString()\n .replace(`data:${arquivoRedimensionado.type};base64,`, ''),\n nome: arquivoRedimensionado.name,\n mimetype: arquivoRedimensionado.type,\n tamanho: arquivoRedimensionado.size,\n },\n { shouldDirty: true },\n );\n };\n\n reader.readAsDataURL(arquivoRedimensionado);\n }\n\n const onRemoverLogo = () => setValue('logo', undefined, { shouldDirty: true });\n\n const getIniciaisEmpresa = (): string => {\n const text = empresaNomeFantasia || empresaRazaoSocial || '';\n\n return text\n .split(' ')\n .map((item) => item[0])\n .join('')\n .substring(0, 2)\n .toUpperCase();\n };\n\n return { open, getInputProps, logo, getIniciaisEmpresa, onRemoverLogo, isDirty, isSubmitting };\n};\n","import { LIcon } from '@s_mart/core';\nimport { linePicture, lineSync, lineTrash } from '@s_mart/solid-icons';\nimport { colorPalette } from '@s_mart/tokens';\n\nimport { Avatar, Button, CircularProgress, Grid, Typography, useMediaQuery } from '@mui/material';\n\nimport { useHeader } from './useHeader';\n\nexport function Header() {\n const { open, getInputProps, logo, onRemoverLogo, getIniciaisEmpresa, isDirty, isSubmitting } =\n useHeader();\n const mobileLayout = useMediaQuery('(max-width:600px)');\n\n return (\n <Grid\n container\n spacing={2}\n sx={{\n alignItems: 'center',\n justifyContent: 'space-between',\n flexWrap: mobileLayout ? 'wrap-reverse' : undefined,\n }}\n >\n <Grid sx={{ display: 'flex', alignItems: 'center', gap: mobileLayout ? '0.5rem' : '1rem' }}>\n <Avatar\n src={logo ? `data:${logo.mimetype};base64,${logo.conteudo}` : undefined}\n sx={{\n borderRadius: mobileLayout ? '10px' : '16px',\n height: mobileLayout ? '3rem' : '4rem',\n width: mobileLayout ? '3rem' : '4rem',\n backgroundColor: colorPalette.neutral[100],\n }}\n alt='Logotipo/empresa'\n >\n {!logo && getIniciaisEmpresa()}\n </Avatar>\n\n <input {...getInputProps()} />\n\n {logo ? (\n <>\n <Button\n type='button'\n variant='neutral'\n startIcon={mobileLayout ? undefined : <LIcon icon={lineSync} />}\n onClick={open}\n >\n Alterar logo\n </Button>\n\n <Button\n type='button'\n variant='outlined'\n color='error'\n startIcon={mobileLayout ? undefined : <LIcon icon={lineTrash} />}\n onClick={onRemoverLogo}\n >\n Remover\n </Button>\n </>\n ) : (\n <div>\n <Button\n type='button'\n variant='neutral'\n startIcon={<LIcon icon={linePicture} />}\n onClick={open}\n >\n Adicionar logo\n </Button>\n\n <Typography\n variant='bodyXXS'\n sx={{ color: colorPalette.neutral[100] }}\n style={{ display: 'block', marginTop: '0.3rem' }}\n >\n Utilize imagens no formato .jpg, .png ou .jpeg com\n <br /> tamanho recomendado de 300x160 pixels.\n </Typography>\n </div>\n )}\n </Grid>\n\n <Grid size={{ xs: 12, sm: 'auto' }}>\n <Button\n type='submit'\n disabled={isSubmitting || !isDirty}\n startIcon={\n isSubmitting && (\n <div style={{ display: 'flex' }}>\n <CircularProgress size='1rem' sx={{ color: '#FFF' }} />\n </div>\n )\n }\n fullWidth={mobileLayout}\n >\n Salvar informações\n </Button>\n </Grid>\n </Grid>\n );\n}\n","import dayjs from 'dayjs';\n\nimport type { AtualizarMeusDadosBody, BuscarMeusDadosResponse } from '../../helpers/contrateApi/meusDadosApi.types';\nimport type { MinhaEmpresaFormValues } from './minhaEmpresa.types';\n\nexport const assembleMinhaEmpresaForm = (values: BuscarMeusDadosResponse) => {\n const formValues = { empresa: {}, endereco: {}, responsavel: {}, flags: {} } as MinhaEmpresaFormValues;\n\n if (values.logotipo) formValues.logo = values.logotipo;\n\n if (values.cpfCnpj) formValues.empresa.cpfCnpj = values.cpfCnpj;\n if (values.razaoSocial) formValues.empresa.razaoSocial = values.razaoSocial;\n if (values.nomeFantasia) formValues.empresa.nomeFantasia = values.nomeFantasia;\n if (values.email) formValues.empresa.email = values.email;\n if (values.fone) formValues.empresa.fone = values.fone;\n if (values.ie) formValues.empresa.ie = values.ie;\n if (values.rntrc) formValues.empresa.rntrc = values.rntrc;\n if (values.rntrcDataVencimento && values.rntrcDataVencimento !== '0001-01-01T00:00:00Z')\n formValues.empresa.rntrcDataVencimento = dayjs(values.rntrcDataVencimento);\n\n if (values.cep) {\n formValues.endereco.cep = values.cep;\n formValues.flags.ultimoCepBuscado = values.cep;\n }\n if (values.cidade && values.codigoCidade && values.uf)\n formValues.endereco.cidade = {\n label: `${values.cidade}/${values.uf}`,\n value: { codigo: values.codigoCidade, nome: values.cidade, uf: values.uf },\n };\n if (values.bairro) formValues.endereco.bairro = values.bairro;\n if (values.rua) formValues.endereco.rua = values.rua;\n if (values.numero) formValues.endereco.numero = values.numero;\n if (values.complemento) formValues.endereco.complemento = values.complemento;\n\n if (values.nomeResponsavel) formValues.responsavel.nome = values.nomeResponsavel;\n if (values.emailResponsavel) formValues.responsavel.email = values.emailResponsavel;\n if (values.foneResponsavel) formValues.responsavel.fone = values.foneResponsavel;\n\n return formValues;\n};\n\nexport const assembleMinhaEmpresaQuery = (values: MinhaEmpresaFormValues) => {\n const query = {} as AtualizarMeusDadosBody;\n\n if (values.empresa) {\n const empresa = values.empresa;\n\n if (empresa.razaoSocial) query.razaoSocial = empresa.razaoSocial.trim();\n if (empresa.nomeFantasia) query.nomeFantasia = empresa.nomeFantasia.trim();\n if (empresa.email) query.email = empresa.email.toLowerCase().trim();\n if (empresa.ie) query.ie = empresa.ie;\n if (empresa.fone) query.fone = empresa.fone;\n\n query.rntrc = empresa.rntrc || '';\n if (empresa?.rntrcDataVencimento) {\n query.rntrcDataVencimento = empresa.rntrcDataVencimento.toISOString();\n } else {\n query.rntrcDataVencimento = '0001-01-01T00:00:00Z'; // tem que ser a data zero do golang\n }\n }\n\n if (values.endereco) {\n const endereco = values.endereco;\n\n if (endereco.cep) query.cep = endereco.cep;\n if (endereco.bairro) query.bairro = endereco.bairro;\n if (endereco.rua) query.rua = endereco.rua;\n if (endereco.numero) query.numero = endereco.numero;\n if (endereco.complemento) query.complemento = endereco.complemento;\n if (endereco.cidade?.value) query.codigoCidade = endereco.cidade.value.codigo;\n }\n\n if (values.responsavel) {\n const responsavel = values.responsavel;\n\n if (responsavel.nome) query.nomeResponsavel = responsavel.nome.trim();\n if (responsavel.email) query.emailResponsavel = responsavel.email.toLowerCase().trim();\n if (responsavel.fone) query.foneResponsavel = responsavel.fone;\n }\n\n if (values.logo)\n query.logotipo = {\n conteudo: values.logo.conteudo,\n nome: values.logo.nome,\n mimetype: values.logo.mimetype,\n tamanho: values.logo.tamanho,\n };\n\n return query;\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { type FormEventHandler, useCallback, useEffect } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useApi, useMinhaContaStore } from '../../context/minhaContaProvider';\nimport { useNotificationContext } from '../../context/notificationProvider';\nimport { assembleMinhaEmpresaForm, assembleMinhaEmpresaQuery } from './minhaEmpresa.helpers';\nimport type { MinhaEmpresaFormValues } from './minhaEmpresa.types';\n\nexport const useMinhaEmpresa = () => {\n const onDadosAtualizadosComSucesso = useMinhaContaStore((state) => state.minhaEmpresa.onDadosAtualizadosComSucesso);\n const { handleErrors, setNotification } = useNotificationContext();\n\n const api = useApi();\n const queryClient = useQueryClient();\n const meusDadosQuery = useQuery(api.buscarMeusDados());\n const meusDados = meusDadosQuery.data?.data.data;\n\n const form = useForm<MinhaEmpresaFormValues>({\n async defaultValues() {\n const response = await queryClient.ensureQueryData(api.buscarMeusDados());\n return assembleMinhaEmpresaForm(response.data.data);\n },\n });\n\n useEffect(() => {\n if (meusDados) form.reset(assembleMinhaEmpresaForm(meusDados));\n }, [form.reset, meusDados]);\n\n const atualizarMeusDados = useMutation({\n ...api.atualizarMeusDados(),\n onSuccess(_, body) {\n setNotification({\n title: 'Dados atualizados com sucesso!',\n variant: 'success',\n });\n\n onDadosAtualizadosComSucesso?.(body);\n },\n onError: handleErrors.bind(null),\n });\n\n const handleSubmit: FormEventHandler = useCallback(\n (e) => {\n e.preventDefault();\n e.stopPropagation();\n return form.handleSubmit(async (values) => {\n const body = assembleMinhaEmpresaQuery(values);\n await atualizarMeusDados.mutateAsync(body);\n form.reset(values);\n await meusDadosQuery.refetch();\n })(e);\n },\n [form.handleSubmit, atualizarMeusDados.mutateAsync, form.reset, meusDadosQuery.refetch],\n );\n\n return { form, handleSubmit };\n};\n","import { CircularProgress, Divider, Grid, Paper, useMediaQuery } from '@mui/material';\nimport { memo } from 'react';\nimport { FormProvider } from 'react-hook-form';\nimport { SPaper } from '../../shared/styles';\nimport { DadosEmpresa } from './dadosEmpresa/dadosEmpresa';\nimport { DadosEndereco } from './dadosEndereco/dadosEndereco';\nimport { DadosResponsavel } from './dadosResponsavel/dadosResponsavel';\nimport { Header } from './header/header';\nimport { useMinhaEmpresa } from './useMinhaEmpresa';\n\nfunction MinhaEmpresaComp() {\n const { form, handleSubmit } = useMinhaEmpresa();\n const mobileLayout = useMediaQuery('(max-width: 600px)');\n\n if (form.formState.isLoading)\n return (\n <SPaper centerContent height='75vh'>\n <CircularProgress />\n </SPaper>\n );\n\n return (\n <FormProvider {...form}>\n <form onSubmit={handleSubmit}>\n <Paper\n elevation={2}\n sx={{ borderRadius: mobileLayout ? '0 0 16px 16px' : '0 16px 16px 16px', padding: '1rem' }}\n >\n <Grid container spacing={3}>\n <Grid size={12}>\n <Header />\n </Grid>\n\n <Grid size={12}>\n <Divider />\n </Grid>\n\n <Grid size={12}>\n <DadosEmpresa />\n </Grid>\n\n <Grid size={12}>\n <Divider />\n </Grid>\n\n <Grid size={12}>\n <DadosEndereco />\n </Grid>\n\n <Grid size={12}>\n <Divider />\n </Grid>\n\n <Grid size={12}>\n <DadosResponsavel />\n </Grid>\n </Grid>\n </Paper>\n </form>\n </FormProvider>\n );\n}\n\nexport const MinhaEmpresa = memo(MinhaEmpresaComp);\n\nMinhaEmpresa.displayName = 'MinhaEmpresa';\n","import { useMediaQuery } from '@mui/material';\nimport { useMinhaContaStore } from '../../context/minhaContaProvider';\n\nexport const useMinhaConta = () => {\n const tabAtiva = useMinhaContaStore((state) => state.tabAtiva || 'minhaEmpresa');\n const setTabAtiva = useMinhaContaStore((state) => state.setTabAtiva);\n const esconderTabMeuPlano = useMinhaContaStore((state) => state.esconderTabMeuPlano);\n const fullWidthTabs = useMediaQuery('(max-width:600px)');\n\n return { esconderTabMeuPlano, tabAtiva, setTabAtiva, fullWidthTabs };\n};\n","import { Grid, Tab, Tabs } from '@mui/material';\nimport { MinhaContaProvider } from '../../context/minhaContaProvider';\nimport { MinhaContaQueryProvider } from '../../context/minhaContaQueryProvider';\nimport { NotificationProvider } from '../../context/notificationProvider';\nimport type { NotificationProviderProps } from '../../context/notificationProvider.types';\nimport { MeuPlano } from '../meuPlano/meuPlano';\nimport { MinhaEmpresa } from '../minhaEmpresa/minhaEmpresa';\nimport type { MinhaContaProps } from './minhaConta.types';\nimport { useMinhaConta } from './useMinhaConta';\n\nfunction MinhaContaComp({ onNotification }: Pick<NotificationProviderProps, 'onNotification'>) {\n const { esconderTabMeuPlano, tabAtiva, setTabAtiva, fullWidthTabs } = useMinhaConta();\n\n return (\n <NotificationProvider onNotification={onNotification}>\n <Grid container>\n <Grid size={{ xs: 12, sm: 'auto' }}>\n <Tabs\n variant={fullWidthTabs ? 'fullWidth' : 'standard'}\n value={tabAtiva}\n onChange={(_, value) => setTabAtiva(value)}\n >\n <Tab label='Minha empresa' value='minhaEmpresa' />\n {!esconderTabMeuPlano && <Tab label='Meu plano' value='meuPlano' />}\n </Tabs>\n </Grid>\n\n <Grid size={12}>\n {tabAtiva === 'minhaEmpresa' ? <MinhaEmpresa /> : null}\n {tabAtiva === 'meuPlano' ? <MeuPlano /> : null}\n </Grid>\n </Grid>\n </NotificationProvider>\n );\n}\n\nexport function MinhaConta(props: MinhaContaProps) {\n return (\n <MinhaContaQueryProvider>\n <MinhaContaProvider {...props}>\n <MinhaContaComp onNotification={props.onNotification} />\n </MinhaContaProvider>\n </MinhaContaQueryProvider>\n );\n}\n"],"mappings":"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"}