Spaces:
Running
Running
Guilherme Silberfarb Costa commited on
Commit ·
1d89fc8
1
Parent(s): 225c9ff
correcoes observacao
Browse files
frontend/src/components/AvaliacaoTab.jsx
CHANGED
|
@@ -4,6 +4,7 @@ import { buildCsvBlob } from '../csv'
|
|
| 4 |
import { buildAvaliacaoModeloLink } from '../deepLinks'
|
| 5 |
import LoadingOverlay from './LoadingOverlay'
|
| 6 |
import MapFrame from './MapFrame'
|
|
|
|
| 7 |
import ShareLinkButton from './ShareLinkButton'
|
| 8 |
import SinglePillAutocomplete from './SinglePillAutocomplete'
|
| 9 |
import TruncatedCellContent from './TruncatedCellContent'
|
|
@@ -526,6 +527,7 @@ export default function AvaliacaoTab({ sessionId, quickLoadRequest = null, onRou
|
|
| 526 |
const [avaliandoLocalizacaoStatus, setAvaliandoLocalizacaoStatus] = useState('')
|
| 527 |
const [avaliandoLogradouroOptions, setAvaliandoLogradouroOptions] = useState([])
|
| 528 |
const [avaliandoLogradouroLoading, setAvaliandoLogradouroLoading] = useState(false)
|
|
|
|
| 529 |
|
| 530 |
const [avaliacoesCards, setAvaliacoesCards] = useState([])
|
| 531 |
const [baseCardId, setBaseCardId] = useState(BASE_COMPARACAO_SEM_BASE)
|
|
@@ -728,32 +730,9 @@ export default function AvaliacaoTab({ sessionId, quickLoadRequest = null, onRou
|
|
| 728 |
}, [sessionId])
|
| 729 |
|
| 730 |
useEffect(() => {
|
| 731 |
-
|
| 732 |
-
|
| 733 |
-
|
| 734 |
-
}
|
| 735 |
-
|
| 736 |
-
setAvaliandoLogradouroLoading(true)
|
| 737 |
-
api.pesquisarModelos({ somente_contexto: true })
|
| 738 |
-
.then((resp) => {
|
| 739 |
-
if (!ativo) return
|
| 740 |
-
const logradouros = Array.isArray(resp?.sugestoes?.logradouros_eixos)
|
| 741 |
-
? resp.sugestoes.logradouros_eixos
|
| 742 |
-
: []
|
| 743 |
-
setAvaliandoLogradouroOptions(logradouros)
|
| 744 |
-
})
|
| 745 |
-
.catch(() => {
|
| 746 |
-
if (!ativo) return
|
| 747 |
-
setAvaliandoLogradouroOptions([])
|
| 748 |
-
})
|
| 749 |
-
.finally(() => {
|
| 750 |
-
if (!ativo) return
|
| 751 |
-
setAvaliandoLogradouroLoading(false)
|
| 752 |
-
})
|
| 753 |
-
|
| 754 |
-
return () => {
|
| 755 |
-
ativo = false
|
| 756 |
-
}
|
| 757 |
}, [sessionId])
|
| 758 |
|
| 759 |
useEffect(() => {
|
|
@@ -823,6 +802,23 @@ export default function AvaliacaoTab({ sessionId, quickLoadRequest = null, onRou
|
|
| 823 |
}
|
| 824 |
}
|
| 825 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 826 |
async function onUploadModel(arquivo = null) {
|
| 827 |
const arquivoUpload = arquivo || uploadedFile
|
| 828 |
if (!sessionId || !arquivoUpload) return
|
|
@@ -1305,12 +1301,7 @@ export default function AvaliacaoTab({ sessionId, quickLoadRequest = null, onRou
|
|
| 1305 |
)}
|
| 1306 |
{status ? <div className="status-line">{status}</div> : null}
|
| 1307 |
{badgeHtml ? <div className="upload-badge-block" dangerouslySetInnerHTML={{ __html: badgeHtml }} /> : null}
|
| 1308 |
-
{modeloObservacao
|
| 1309 |
-
<div className="elaborador-badge modelo-observacao-badge">
|
| 1310 |
-
<div className="elaborador-badge-title">OBSERVAÇÃO</div>
|
| 1311 |
-
<div className="modelo-observacao-text">{modeloObservacao}</div>
|
| 1312 |
-
</div>
|
| 1313 |
-
) : null}
|
| 1314 |
</div>
|
| 1315 |
|
| 1316 |
{!modeloPronto ? (
|
|
@@ -1417,6 +1408,9 @@ export default function AvaliacaoTab({ sessionId, quickLoadRequest = null, onRou
|
|
| 1417 |
panelTitle="Logradouros dos eixos"
|
| 1418 |
emptyMessage="Nenhum logradouro encontrado nos eixos."
|
| 1419 |
loading={avaliandoLogradouroLoading}
|
|
|
|
|
|
|
|
|
|
| 1420 |
inputName="logradouroEixosAvaliacao"
|
| 1421 |
inputAutoComplete="new-password"
|
| 1422 |
/>
|
|
|
|
| 4 |
import { buildAvaliacaoModeloLink } from '../deepLinks'
|
| 5 |
import LoadingOverlay from './LoadingOverlay'
|
| 6 |
import MapFrame from './MapFrame'
|
| 7 |
+
import ModeloObservacaoCard from './ModeloObservacaoCard'
|
| 8 |
import ShareLinkButton from './ShareLinkButton'
|
| 9 |
import SinglePillAutocomplete from './SinglePillAutocomplete'
|
| 10 |
import TruncatedCellContent from './TruncatedCellContent'
|
|
|
|
| 527 |
const [avaliandoLocalizacaoStatus, setAvaliandoLocalizacaoStatus] = useState('')
|
| 528 |
const [avaliandoLogradouroOptions, setAvaliandoLogradouroOptions] = useState([])
|
| 529 |
const [avaliandoLogradouroLoading, setAvaliandoLogradouroLoading] = useState(false)
|
| 530 |
+
const [avaliandoLogradouroLoaded, setAvaliandoLogradouroLoaded] = useState(false)
|
| 531 |
|
| 532 |
const [avaliacoesCards, setAvaliacoesCards] = useState([])
|
| 533 |
const [baseCardId, setBaseCardId] = useState(BASE_COMPARACAO_SEM_BASE)
|
|
|
|
| 730 |
}, [sessionId])
|
| 731 |
|
| 732 |
useEffect(() => {
|
| 733 |
+
setAvaliandoLogradouroOptions([])
|
| 734 |
+
setAvaliandoLogradouroLoading(false)
|
| 735 |
+
setAvaliandoLogradouroLoaded(false)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 736 |
}, [sessionId])
|
| 737 |
|
| 738 |
useEffect(() => {
|
|
|
|
| 802 |
}
|
| 803 |
}
|
| 804 |
|
| 805 |
+
async function carregarSugestoesLogradouroAvaliando() {
|
| 806 |
+
if (!sessionId || avaliandoLogradouroLoading || avaliandoLogradouroLoaded) return
|
| 807 |
+
setAvaliandoLogradouroLoading(true)
|
| 808 |
+
try {
|
| 809 |
+
const response = await api.pesquisarLogradourosEixos()
|
| 810 |
+
const opcoes = Array.isArray(response?.logradouros_eixos)
|
| 811 |
+
? response.logradouros_eixos.map((item) => String(item || '').trim()).filter(Boolean)
|
| 812 |
+
: []
|
| 813 |
+
setAvaliandoLogradouroOptions(opcoes)
|
| 814 |
+
setAvaliandoLogradouroLoaded(true)
|
| 815 |
+
} catch {
|
| 816 |
+
setAvaliandoLogradouroOptions([])
|
| 817 |
+
} finally {
|
| 818 |
+
setAvaliandoLogradouroLoading(false)
|
| 819 |
+
}
|
| 820 |
+
}
|
| 821 |
+
|
| 822 |
async function onUploadModel(arquivo = null) {
|
| 823 |
const arquivoUpload = arquivo || uploadedFile
|
| 824 |
if (!sessionId || !arquivoUpload) return
|
|
|
|
| 1301 |
)}
|
| 1302 |
{status ? <div className="status-line">{status}</div> : null}
|
| 1303 |
{badgeHtml ? <div className="upload-badge-block" dangerouslySetInnerHTML={{ __html: badgeHtml }} /> : null}
|
| 1304 |
+
<ModeloObservacaoCard text={modeloObservacao} className="modelo-observacao-badge" />
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1305 |
</div>
|
| 1306 |
|
| 1307 |
{!modeloPronto ? (
|
|
|
|
| 1408 |
panelTitle="Logradouros dos eixos"
|
| 1409 |
emptyMessage="Nenhum logradouro encontrado nos eixos."
|
| 1410 |
loading={avaliandoLogradouroLoading}
|
| 1411 |
+
onOpenChange={(open) => {
|
| 1412 |
+
if (open) void carregarSugestoesLogradouroAvaliando()
|
| 1413 |
+
}}
|
| 1414 |
inputName="logradouroEixosAvaliacao"
|
| 1415 |
inputAutoComplete="new-password"
|
| 1416 |
/>
|
frontend/src/components/ModeloObservacaoCard.jsx
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import React, { useEffect, useState } from 'react'
|
| 2 |
+
|
| 3 |
+
export default function ModeloObservacaoCard({
|
| 4 |
+
text,
|
| 5 |
+
title = 'OBSERVAÇÃO',
|
| 6 |
+
defaultOpen = true,
|
| 7 |
+
className = '',
|
| 8 |
+
}) {
|
| 9 |
+
const content = String(text || '').trim()
|
| 10 |
+
const [open, setOpen] = useState(defaultOpen)
|
| 11 |
+
|
| 12 |
+
useEffect(() => {
|
| 13 |
+
setOpen(defaultOpen)
|
| 14 |
+
}, [content, defaultOpen])
|
| 15 |
+
|
| 16 |
+
if (!content) return null
|
| 17 |
+
|
| 18 |
+
const classes = [
|
| 19 |
+
'elaborador-badge',
|
| 20 |
+
'modelo-observacao-card',
|
| 21 |
+
open ? 'is-open' : '',
|
| 22 |
+
className,
|
| 23 |
+
].filter(Boolean).join(' ')
|
| 24 |
+
|
| 25 |
+
return (
|
| 26 |
+
<div className={classes}>
|
| 27 |
+
<button
|
| 28 |
+
type="button"
|
| 29 |
+
className="modelo-observacao-toggle"
|
| 30 |
+
onClick={() => setOpen((prev) => !prev)}
|
| 31 |
+
aria-expanded={open}
|
| 32 |
+
title={open ? 'Recolher observação' : 'Expandir observação'}
|
| 33 |
+
>
|
| 34 |
+
<span className="elaborador-badge-title">{title}</span>
|
| 35 |
+
<span className="modelo-observacao-toggle-icon" aria-hidden="true">▾</span>
|
| 36 |
+
</button>
|
| 37 |
+
{open ? <div className="modelo-observacao-text">{content}</div> : null}
|
| 38 |
+
</div>
|
| 39 |
+
)
|
| 40 |
+
}
|
frontend/src/components/PesquisaTab.jsx
CHANGED
|
@@ -6,6 +6,7 @@ import DataTable from './DataTable'
|
|
| 6 |
import EquationFormatsPanel from './EquationFormatsPanel'
|
| 7 |
import LoadingOverlay from './LoadingOverlay'
|
| 8 |
import MapFrame from './MapFrame'
|
|
|
|
| 9 |
import ModeloTrabalhosTecnicosPanel from './ModeloTrabalhosTecnicosPanel'
|
| 10 |
import PlotFigure from './PlotFigure'
|
| 11 |
import PesquisaAdminConfigPanel from './PesquisaAdminConfigPanel'
|
|
@@ -1638,7 +1639,6 @@ export default function PesquisaTab({
|
|
| 1638 |
<div className="pesquisa-opened-model-head">
|
| 1639 |
<div className="pesquisa-opened-model-title-wrap">
|
| 1640 |
<h3>{modeloAbertoMeta?.nome || 'Modelo'}</h3>
|
| 1641 |
-
{modeloAbertoMeta?.observacao ? <p>{modeloAbertoMeta.observacao}</p> : null}
|
| 1642 |
</div>
|
| 1643 |
<button
|
| 1644 |
type="button"
|
|
@@ -1649,6 +1649,7 @@ export default function PesquisaTab({
|
|
| 1649 |
Voltar para pesquisa
|
| 1650 |
</button>
|
| 1651 |
</div>
|
|
|
|
| 1652 |
|
| 1653 |
<div className="inner-tabs" role="tablist" aria-label="Abas internas do modelo aberto na pesquisa">
|
| 1654 |
{PESQUISA_INNER_TABS.map((tab) => (
|
|
|
|
| 6 |
import EquationFormatsPanel from './EquationFormatsPanel'
|
| 7 |
import LoadingOverlay from './LoadingOverlay'
|
| 8 |
import MapFrame from './MapFrame'
|
| 9 |
+
import ModeloObservacaoCard from './ModeloObservacaoCard'
|
| 10 |
import ModeloTrabalhosTecnicosPanel from './ModeloTrabalhosTecnicosPanel'
|
| 11 |
import PlotFigure from './PlotFigure'
|
| 12 |
import PesquisaAdminConfigPanel from './PesquisaAdminConfigPanel'
|
|
|
|
| 1639 |
<div className="pesquisa-opened-model-head">
|
| 1640 |
<div className="pesquisa-opened-model-title-wrap">
|
| 1641 |
<h3>{modeloAbertoMeta?.nome || 'Modelo'}</h3>
|
|
|
|
| 1642 |
</div>
|
| 1643 |
<button
|
| 1644 |
type="button"
|
|
|
|
| 1649 |
Voltar para pesquisa
|
| 1650 |
</button>
|
| 1651 |
</div>
|
| 1652 |
+
<ModeloObservacaoCard text={modeloAbertoMeta?.observacao} className="pesquisa-opened-model-observacao" />
|
| 1653 |
|
| 1654 |
<div className="inner-tabs" role="tablist" aria-label="Abas internas do modelo aberto na pesquisa">
|
| 1655 |
{PESQUISA_INNER_TABS.map((tab) => (
|
frontend/src/components/RepositorioTab.jsx
CHANGED
|
@@ -6,6 +6,7 @@ import EquationFormatsPanel from './EquationFormatsPanel'
|
|
| 6 |
import ListPagination from './ListPagination'
|
| 7 |
import LoadingOverlay from './LoadingOverlay'
|
| 8 |
import MapFrame from './MapFrame'
|
|
|
|
| 9 |
import ModeloTrabalhosTecnicosPanel from './ModeloTrabalhosTecnicosPanel'
|
| 10 |
import PlotFigure from './PlotFigure'
|
| 11 |
import ShareLinkButton from './ShareLinkButton'
|
|
@@ -618,7 +619,6 @@ export default function RepositorioTab({
|
|
| 618 |
<div className="pesquisa-opened-model-head">
|
| 619 |
<div className="pesquisa-opened-model-title-wrap">
|
| 620 |
<h3>{modeloAbertoMeta?.nome || 'Modelo'}</h3>
|
| 621 |
-
{modeloAbertoMeta?.observacao ? <p>{modeloAbertoMeta.observacao}</p> : null}
|
| 622 |
</div>
|
| 623 |
<div className="pesquisa-opened-model-actions">
|
| 624 |
<ShareLinkButton href={shareHref} />
|
|
@@ -647,6 +647,7 @@ export default function RepositorioTab({
|
|
| 647 |
</button>
|
| 648 |
</div>
|
| 649 |
</div>
|
|
|
|
| 650 |
|
| 651 |
<div className="inner-tabs" role="tablist" aria-label="Abas internas do modelo aberto no repositório">
|
| 652 |
{REPO_INNER_TABS.map((tab) => (
|
|
|
|
| 6 |
import ListPagination from './ListPagination'
|
| 7 |
import LoadingOverlay from './LoadingOverlay'
|
| 8 |
import MapFrame from './MapFrame'
|
| 9 |
+
import ModeloObservacaoCard from './ModeloObservacaoCard'
|
| 10 |
import ModeloTrabalhosTecnicosPanel from './ModeloTrabalhosTecnicosPanel'
|
| 11 |
import PlotFigure from './PlotFigure'
|
| 12 |
import ShareLinkButton from './ShareLinkButton'
|
|
|
|
| 619 |
<div className="pesquisa-opened-model-head">
|
| 620 |
<div className="pesquisa-opened-model-title-wrap">
|
| 621 |
<h3>{modeloAbertoMeta?.nome || 'Modelo'}</h3>
|
|
|
|
| 622 |
</div>
|
| 623 |
<div className="pesquisa-opened-model-actions">
|
| 624 |
<ShareLinkButton href={shareHref} />
|
|
|
|
| 647 |
</button>
|
| 648 |
</div>
|
| 649 |
</div>
|
| 650 |
+
<ModeloObservacaoCard text={modeloAbertoMeta?.observacao} className="pesquisa-opened-model-observacao" />
|
| 651 |
|
| 652 |
<div className="inner-tabs" role="tablist" aria-label="Abas internas do modelo aberto no repositório">
|
| 653 |
{REPO_INNER_TABS.map((tab) => (
|
frontend/src/styles.css
CHANGED
|
@@ -4767,6 +4767,35 @@ button.btn-upload-select {
|
|
| 4767 |
margin-top: 10px;
|
| 4768 |
}
|
| 4769 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4770 |
.modelo-observacao-text {
|
| 4771 |
margin-top: 6px;
|
| 4772 |
color: #40586f;
|
|
@@ -4775,6 +4804,10 @@ button.btn-upload-select {
|
|
| 4775 |
white-space: pre-line;
|
| 4776 |
}
|
| 4777 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4778 |
.modelo-variaveis-box {
|
| 4779 |
padding: 9px 11px;
|
| 4780 |
border-radius: 11px;
|
|
|
|
| 4767 |
margin-top: 10px;
|
| 4768 |
}
|
| 4769 |
|
| 4770 |
+
.modelo-observacao-card {
|
| 4771 |
+
padding-top: 9px;
|
| 4772 |
+
}
|
| 4773 |
+
|
| 4774 |
+
.modelo-observacao-toggle {
|
| 4775 |
+
width: 100%;
|
| 4776 |
+
border: 0;
|
| 4777 |
+
padding: 0;
|
| 4778 |
+
background: transparent;
|
| 4779 |
+
display: flex;
|
| 4780 |
+
align-items: center;
|
| 4781 |
+
justify-content: space-between;
|
| 4782 |
+
gap: 12px;
|
| 4783 |
+
cursor: pointer;
|
| 4784 |
+
text-align: left;
|
| 4785 |
+
}
|
| 4786 |
+
|
| 4787 |
+
.modelo-observacao-toggle-icon {
|
| 4788 |
+
flex: 0 0 auto;
|
| 4789 |
+
color: #68829c;
|
| 4790 |
+
font-size: 0.8rem;
|
| 4791 |
+
line-height: 1;
|
| 4792 |
+
transition: transform 0.15s ease;
|
| 4793 |
+
}
|
| 4794 |
+
|
| 4795 |
+
.modelo-observacao-card:not(.is-open) .modelo-observacao-toggle-icon {
|
| 4796 |
+
transform: rotate(-90deg);
|
| 4797 |
+
}
|
| 4798 |
+
|
| 4799 |
.modelo-observacao-text {
|
| 4800 |
margin-top: 6px;
|
| 4801 |
color: #40586f;
|
|
|
|
| 4804 |
white-space: pre-line;
|
| 4805 |
}
|
| 4806 |
|
| 4807 |
+
.pesquisa-opened-model-observacao {
|
| 4808 |
+
margin: -2px 0 14px;
|
| 4809 |
+
}
|
| 4810 |
+
|
| 4811 |
.modelo-variaveis-box {
|
| 4812 |
padding: 9px 11px;
|
| 4813 |
border-radius: 11px;
|