mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-13 15:13:07 +00:00
style(C89): formata (prettier)
This commit is contained in:
parent
8d96263554
commit
5a51d60c9e
10 changed files with 51 additions and 68 deletions
|
|
@ -113,8 +113,8 @@ estadual — leitura relativa à carteira (restrição da intenção). Sem % abs
|
|||
## Fases verificáveis
|
||||
|
||||
1. **Tracer / pure (server):** `municipalityUpdateListUrl` + `municipalityUpdateOmnibox`
|
||||
+ unit specs (canonicalização, "todas polaridades→ausente", page clamp,
|
||||
chips/sugestões/apply/remove) — `pnpm gate:fast`.
|
||||
- unit specs (canonicalização, "todas polaridades→ausente", page clamp,
|
||||
chips/sugestões/apply/remove) — `pnpm gate:fast`.
|
||||
2. **Loader + view model:** `campaignUpdatesFeedData` +
|
||||
`loadCampaignUserDisplayByIds`; verificação por int spec leve do loader
|
||||
(carteira de advisor) se existir precedente análogo — senão unit puro.
|
||||
|
|
|
|||
|
|
@ -26,6 +26,5 @@ export const createCampaignUpdatesFormAction = async (
|
|||
revalidatePath('/campanha/atualizacoes')
|
||||
return { message: 'Atualização registrada com sucesso.' }
|
||||
},
|
||||
genericMessage:
|
||||
'Não foi possível registrar a atualização. Verifique o município e seu acesso.',
|
||||
genericMessage: 'Não foi possível registrar a atualização. Verifique o município e seu acesso.',
|
||||
})
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ import { getPayload } from 'payload'
|
|||
|
||||
import { CampaignUpdatesFeed } from '@/components/campaign/municipality/CampaignUpdatesFeed'
|
||||
import { CampaignUpdatesFilters } from '@/components/campaign/municipality/CampaignUpdatesFilters'
|
||||
import { CampaignListFooter } from '@/components/campaign/shared/CampaignListFooter'
|
||||
import {
|
||||
CampaignListPendingBoundary,
|
||||
CampaignListResults,
|
||||
} from '@/components/campaign/shared/CampaignListPending'
|
||||
import { CampaignListFooter } from '@/components/campaign/shared/CampaignListFooter'
|
||||
import { CampaignPageShell } from '@/components/campaign/shell/CampaignPageShell'
|
||||
import { campaignPageMetadataFromCatalog } from '@/lib/campaignPageChrome'
|
||||
import { isCampaignStaff } from '@/utilities/campaignAccess'
|
||||
|
|
|
|||
|
|
@ -9,18 +9,13 @@ import { StrictCombobox } from '@/components/campaign/shared/StrictCombobox'
|
|||
import { useCampaignFormSuccessToast } from '@/components/campaign/shared/useCampaignFormSuccessToast'
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { Dialog, DialogContent, DialogDescription, DialogTitle } from '@/components/ui/dialog'
|
||||
import {
|
||||
Drawer,
|
||||
DrawerContent,
|
||||
DrawerDescription,
|
||||
DrawerTitle,
|
||||
} from '@/components/ui/Drawer'
|
||||
import { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from '@/components/ui/Drawer'
|
||||
import { Field, FieldDescription, FieldError, FieldLabel } from '@/components/ui/field'
|
||||
import { Spinner } from '@/components/ui/Spinner'
|
||||
import { useIsMobile } from '@/hooks/use-mobile'
|
||||
import { getMunicipalityCatalogEntry } from '@/lib/municipalityCatalog'
|
||||
import type { CampaignUpdatesFeedFacets } from '@/utilities/municipality/campaignUpdatesFeedData'
|
||||
import { fieldError } from '@/utilities/campaignFormFields'
|
||||
import type { CampaignUpdatesFeedFacets } from '@/utilities/municipality/campaignUpdatesFeedData'
|
||||
|
||||
type CampaignUpdatesCreateModalProps = {
|
||||
open: boolean
|
||||
|
|
|
|||
|
|
@ -29,11 +29,7 @@ type CampaignUpdatesFiltersProps = {
|
|||
isStaff: boolean
|
||||
}
|
||||
|
||||
export const CampaignUpdatesFilters = ({
|
||||
state,
|
||||
facets,
|
||||
isStaff,
|
||||
}: CampaignUpdatesFiltersProps) => {
|
||||
export const CampaignUpdatesFilters = ({ state, facets, isStaff }: CampaignUpdatesFiltersProps) => {
|
||||
const { navigate, isPending } = useCampaignListFilterNavigation({
|
||||
state,
|
||||
toHref: (next) => buildCampaignUpdatesFeedHref(next, 1),
|
||||
|
|
@ -107,37 +103,37 @@ export const CampaignUpdatesFilters = ({
|
|||
>
|
||||
<CampaignListOmnibox
|
||||
id="campaign-updates-omnibox"
|
||||
label="Filtrar atualizações"
|
||||
placeholder="Digite para filtrar (município, polaridade, autor…)"
|
||||
chips={chips}
|
||||
suggestions={suggestions}
|
||||
query={query}
|
||||
onQueryChange={setQuery}
|
||||
isPending={isPending}
|
||||
onSelectSuggestion={(suggestionId) => {
|
||||
runAction(applyCampaignUpdatesFeedSuggestion({ state, suggestionId }))
|
||||
}}
|
||||
onCommitQuery={(text) => {
|
||||
runAction(applyCampaignUpdatesFeedSuggestion({ state, suggestionId: `q:${text}` }))
|
||||
}}
|
||||
onRemoveChip={(chipId) => {
|
||||
runAction(removeCampaignUpdatesFeedChip({ state, chipId }))
|
||||
}}
|
||||
onClearAll={() => {
|
||||
runAction(clearCampaignUpdatesFeedFilters())
|
||||
}}
|
||||
trailing={
|
||||
<Button
|
||||
type="button"
|
||||
variant="outline"
|
||||
className="min-h-11 shrink-0 gap-2"
|
||||
onClick={() => setCreateOpen(true)}
|
||||
>
|
||||
<Plus aria-hidden="true" />
|
||||
Nova atualização
|
||||
</Button>
|
||||
}
|
||||
/>
|
||||
label="Filtrar atualizações"
|
||||
placeholder="Digite para filtrar (município, polaridade, autor…)"
|
||||
chips={chips}
|
||||
suggestions={suggestions}
|
||||
query={query}
|
||||
onQueryChange={setQuery}
|
||||
isPending={isPending}
|
||||
onSelectSuggestion={(suggestionId) => {
|
||||
runAction(applyCampaignUpdatesFeedSuggestion({ state, suggestionId }))
|
||||
}}
|
||||
onCommitQuery={(text) => {
|
||||
runAction(applyCampaignUpdatesFeedSuggestion({ state, suggestionId: `q:${text}` }))
|
||||
}}
|
||||
onRemoveChip={(chipId) => {
|
||||
runAction(removeCampaignUpdatesFeedChip({ state, chipId }))
|
||||
}}
|
||||
onClearAll={() => {
|
||||
runAction(clearCampaignUpdatesFeedFilters())
|
||||
}}
|
||||
trailing={
|
||||
<Button
|
||||
type="button"
|
||||
variant="outline"
|
||||
className="min-h-11 shrink-0 gap-2"
|
||||
onClick={() => setCreateOpen(true)}
|
||||
>
|
||||
<Plus aria-hidden="true" />
|
||||
Nova atualização
|
||||
</Button>
|
||||
}
|
||||
/>
|
||||
</form>
|
||||
<CampaignUpdatesCreateModal
|
||||
open={createOpen}
|
||||
|
|
|
|||
|
|
@ -55,10 +55,7 @@ export const loadCampaignUserDisplayByIds = async (
|
|||
overrideAccess: true,
|
||||
})
|
||||
return new Map(
|
||||
result.docs.map((doc) => [
|
||||
doc.id,
|
||||
{ name: doc.name, avatarUrl: mediaDocumentUrl(doc.avatar) },
|
||||
]),
|
||||
result.docs.map((doc) => [doc.id, { name: doc.name, avatarUrl: mediaDocumentUrl(doc.avatar) }]),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -99,7 +99,11 @@ export const loadCampaignUpdatesFeed = async (
|
|||
urgent: Boolean(doc.urgent),
|
||||
adversarySignal: Boolean(doc.adversarySignal),
|
||||
createdAt: doc.createdAt,
|
||||
author: { id: authorID, name: author?.name ?? 'Usuário', avatarUrl: author?.avatarUrl ?? null },
|
||||
author: {
|
||||
id: authorID,
|
||||
name: author?.name ?? 'Usuário',
|
||||
avatarUrl: author?.avatarUrl ?? null,
|
||||
},
|
||||
municipality: municipality
|
||||
? { id: municipalityID, name: municipality.name, slug: municipality.slug }
|
||||
: { id: municipalityID, name: 'Município', slug: '' },
|
||||
|
|
|
|||
|
|
@ -54,14 +54,7 @@ export type CampaignUpdatesFeedState = {
|
|||
authors?: number[]
|
||||
}
|
||||
|
||||
const campaignUpdatesFeedParamNames = [
|
||||
'q',
|
||||
'slug',
|
||||
'polarity',
|
||||
'urgent',
|
||||
'author',
|
||||
'page',
|
||||
] as const
|
||||
const campaignUpdatesFeedParamNames = ['q', 'slug', 'polarity', 'urgent', 'author', 'page'] as const
|
||||
|
||||
const campaignUpdatesFeedParamNameSet = new Set<string>(campaignUpdatesFeedParamNames)
|
||||
|
||||
|
|
|
|||
|
|
@ -229,12 +229,13 @@ export const removeCampaignUpdatesFeedChip = ({
|
|||
if (chipId.startsWith('slug:')) {
|
||||
const slug = chipId.slice(5)
|
||||
const slugs = (state.slugs ?? []).filter((entry) => entry !== slug)
|
||||
return { kind: 'url', state: withPageReset({ ...state, slugs: slugs.length ? slugs : undefined }) }
|
||||
return {
|
||||
kind: 'url',
|
||||
state: withPageReset({ ...state, slugs: slugs.length ? slugs : undefined }),
|
||||
}
|
||||
}
|
||||
if (chipId.startsWith('polarity:')) {
|
||||
const polarities = (state.polarities ?? []).filter(
|
||||
(entry) => entry !== chipId.slice(9),
|
||||
)
|
||||
const polarities = (state.polarities ?? []).filter((entry) => entry !== chipId.slice(9))
|
||||
return {
|
||||
kind: 'url',
|
||||
state: withPageReset({
|
||||
|
|
|
|||
|
|
@ -91,9 +91,7 @@ describe('campaign updates feed data (C89)', () => {
|
|||
expect(result.cards[0]?.body).toBe('Visita no meu município')
|
||||
|
||||
const facets = await loadCampaignUpdatesFeedFacets(payload, advisor)
|
||||
expect(facets.municipalities.map((municipality) => municipality.slug)).toEqual([
|
||||
assigned.slug,
|
||||
])
|
||||
expect(facets.municipalities.map((municipality) => municipality.slug)).toEqual([assigned.slug])
|
||||
expect(facets.authorOptions.map((option) => option.label)).toContain(coordinator.name)
|
||||
expect(facets.authorOptions.map((option) => option.label)).not.toContain(otherAdvisor.name)
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue