Jump to content

Gregory

Membros
  • Contagem de Conteúdo

    1
  • Ingressou

  • Última visita

Informações Pessoais

  • Cidade
    Santa Bárbara D'Oeste
  • Estado
    São Paulo (SP)

Clientes & Parceiros

  • Você é um cliente TecnoSpeed?
    Não

Conquistas de Gregory

1

Reputação na Comunidade

  1. Galera estou com esse componente utilizando o antd no react import { PessoaStatusEnum, TipoCadastroEnum } from "@/backend/api"; import { FModalMethods } from "@/components/FModal"; import { columnsPessoaStatus } from "@/pages/Cadastros/Pessoas/columns"; import { PessoaStatus } from "@/services/pessoa"; import { dayjsPtBr } from "@/utils/dayjsPtBr"; import { required } from "@/utils/validations"; import { Button, Col, Form, Input, Row, Typography } from "antd"; import { useForm } from "antd/es/form/Form"; import { FormInstance } from "antd/lib"; import { Dayjs } from "dayjs"; import { useEffect, useRef, useState } from "react"; import { v4 as uuid } from "uuid"; import { FDatePicker } from "../FDatePicker"; import DefaultFormFields from "../FFormFields/DefaultFormFields"; import StatusDropdown from "../FStausDropDown"; import FTable from "../FTable"; import { SelectEnum } from "../SelectEnum"; const { Title } = Typography; interface StatusHistoryProps { form: FormInstance; value?: PessoaStatusEnum | null; onChange?: (value: PessoaStatus[]) => void; tipoCadastroInitialValue: keyof typeof TipoCadastroEnum; } export const StatusHistory = ({ form, value, onChange, tipoCadastroInitialValue }: StatusHistoryProps) => { const refFormShow = useRef<null | FModalMethods>(null); const [formModalStatus] = useForm(); const [currentModal, setCurrentModal] = useState(""); const openModal = (type: string) => { setCurrentModal(type); refFormShow.current?.open(); }; const onCancel = () => { formModalStatus.resetFields(); refFormShow.current?.close(); setCurrentModal(""); }; useEffect(() => { if (refFormShow.current) { if (currentModal === "pessoasStatus") { refFormShow.current.open(); } else { refFormShow.current.close(); } } }, [currentModal]); const pessoaStatusFormData = { dataInicio: form.getFieldValue(["pessoasStatus", 0, "dataInicio"]), status: form.getFieldValue(["pessoasStatus", 0, "status"]), observacao: form.getFieldValue(["pessoasStatus", 0, "observacao"]), tipoCadastro: form.getFieldValue(["pessoasStatus", 0, "tipoCadastro"]), }; const handleDropdownClick = (e: React.MouseEvent<HTMLElement>) => { e.stopPropagation(); }; const getCurrentStatus = () => { const statuses = form.getFieldValue(["pessoasStatus"]); const currentStatus = statuses.reduce((acc: PessoaStatus | null, item: PessoaStatus) => { const { dataInicio } = item; if (!dataInicio) return null; const data = dayjsPtBr(dataInicio); const dataMenorQueHoje = data.unix() <= dayjsPtBr().unix(); const dataMaiorQueDataInicioNoAcumulador = data.unix() > ((acc?.dataInicio as Dayjs)?.unix?.() || dayjsPtBr(0).unix()); return dataMenorQueHoje && dataMaiorQueDataInicioNoAcumulador ? item : acc; }, null); return currentStatus as PessoaStatus; }; return ( <StatusDropdown selectedStatus={getCurrentStatus()?.status} placement="bottomLeft" autoAdjustOverflow={true}> <Row justify="space-between" style={{ padding: 8 }}> {currentModal !== "pessoasStatus" ? ( <> <Title level={5}>Histórico de Status</Title> <Button style={{ marginLeft: 20 }} type="primary" onClick={(e) => { handleDropdownClick(e); openModal("pessoasStatus"); }} size="small" > + Adicionar </Button> </> ) : ( <> <Title level={5}>Novo Status</Title> <div> <Row gutter={8} justify="end"> <Col> <Button type="primary" size="small" onClick={async () => { await formModalStatus.validateFields(); const item = formModalStatus.getFieldsValue(); const currentItems: PessoaStatus[] = form.getFieldValue(["pessoasStatus"]) || []; let newFormItemValue: PessoaStatus[]; if (!item.id) { item.id = "_" + uuid(); newFormItemValue = [item, ...currentItems]; } else { const editingIndex = currentItems.findIndex((tableItem) => tableItem.id === item.id); currentItems[editingIndex] = item; newFormItemValue = currentItems; } formModalStatus.resetFields(); setCurrentModal(""); refFormShow.current?.close(); onChange?.(newFormItemValue); }} > Salvar </Button> </Col> <Col> <Button size="small" type="default" onClick={onCancel}> Cancelar </Button> </Col> </Row> </div> </> )} </Row> {currentModal !== "pessoasStatus" ? ( <Form.Item name={["pessoasStatus"]} valuePropName="dataSource" style={{ marginBottom: 0 }}> <FTable<PessoaStatus> resizable columns={columnsPessoaStatus} actions={null} pagination={false} /> </Form.Item> ) : ( <Form form={formModalStatus} layout="vertical" initialValues={pessoaStatusFormData} style={{ padding: "10px" }}> <DefaultFormFields /> <Form.Item name="tipoCadastro" initialValue={tipoCadastroInitialValue} hidden> <Input /> </Form.Item> <Row gutter={24}> <Col span={12}> <Form.Item label="Status" name="status" validateTrigger={["onChange", "onBlur"]} rules={[required]} initialValue={PessoaStatusEnum.Ativo} > <SelectEnum OptionsEnum={PessoaStatusEnum} /> </Form.Item> </Col> <Col span={12}> <Form.Item rules={[required]} label="Data de Ínicio" name="dataInicio" validateTrigger={["onChange", "onBlur"]} > <FDatePicker /> </Form.Item> </Col> </Row> <Row gutter={24}> <Col span={24}> <Form.Item label="Observação" name="observacao" validateTrigger={["onChange", "onBlur"]} rules={[{ whitespace: true }]} > <Input maxLength={14} size="small" /> </Form.Item> </Col> </Row> </Form> )} </StatusDropdown> ); }; // Em outro arquivo <Form.Item label="Status" name={["pessoasStatus"]} validateTrigger={["onChange", "onBlur"]} rules={[{ required: true, message: "Por favor, selecione o tipo de cadastro." }]} > <StatusHistory tipoCadastroInitialValue={tipoCadastroInitialValue} form={form} /> </Form.Item> o que posso fazer , tem uma imagem abaixo de como esta a tela hoje
×
×
  • Create New...