Added links to EU Supply tenders, as there are to Find a Tender notices
This commit is contained in:
1 parent
3a06132071
commit
64886a2f1e
5 files changed
+143
-50
No files matched your search
@@ -6,14 +6,14 @@ import { statusLabel } from '@/lib/filterOpportunities';
|
||||
import { formatDate, formatDateTime, formatValue } from '@/lib/format';
|
||||
import type { ReleaseValue } from '@/lib/ocdsRelease';
|
||||
import { parseReleaseData, summariseRelease } from '@/lib/ocdsRelease';
|
||||
import { findATenderNoticeUrl } from '@/lib/opportunities';
|
||||
import type { NoticeSite } from '@/lib/opportunities';
|
||||
import type { OpportunityRelease } from '@/types/Opportunities';
|
||||
import { JsonView } from './JsonView';
|
||||
|
||||
interface Props {
|
||||
releases: OpportunityRelease[];
|
||||
/** Whether the releases are Find a Tender notices, so each can link to its notice. */
|
||||
isFromFindATender: boolean;
|
||||
/** The site the releases are notices on, so each can link to its notice; undefined if none. */
|
||||
site: NoticeSite | undefined;
|
||||
}
|
||||
|
||||
const tabClass =
|
||||
@@ -44,7 +44,7 @@ function Field(props: FieldProps): JSX.Element {
|
||||
|
||||
interface ReleasePanelProps {
|
||||
release: OpportunityRelease;
|
||||
isFromFindATender: boolean;
|
||||
site: NoticeSite | undefined;
|
||||
}
|
||||
|
||||
/** One release: its notice, a summary of its tender, awards and contracts, and its JSON. */
|
||||
@@ -53,6 +53,11 @@ function ReleasePanel(props: ReleasePanelProps): JSX.Element {
|
||||
const summary = createMemo(() => summariseRelease(parsed()));
|
||||
// The JSON is only laid out once it's opened: a release can be 100KB or more.
|
||||
const [isJsonOpen, setIsJsonOpen] = createSignal(false);
|
||||
const notice = () => {
|
||||
const site = props.site;
|
||||
const url = site?.urlFor(props.release);
|
||||
return site && url ? { name: site.name, url } : undefined;
|
||||
};
|
||||
const json = () => {
|
||||
const data = parsed();
|
||||
return data === undefined ? props.release.data : JSON.stringify(data, null, 2);
|
||||
@@ -66,16 +71,18 @@ function ReleasePanel(props: ReleasePanelProps): JSX.Element {
|
||||
<Field term="Published">{formatDateTime(props.release.release_date)}</Field>
|
||||
<Field term="Tags">{tagsOf(props.release) || '—'}</Field>
|
||||
</dl>
|
||||
<Show when={props.isFromFindATender}>
|
||||
<a
|
||||
class="inline-flex items-center gap-1.5 text-sm text-accent underline"
|
||||
href={findATenderNoticeUrl(props.release.release_id)}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Open notice on Find a Tender
|
||||
<ExternalLink size={14} strokeWidth={2} />
|
||||
</a>
|
||||
<Show when={notice()}>
|
||||
{(notice) => (
|
||||
<a
|
||||
class="inline-flex items-center gap-1.5 text-sm text-accent underline"
|
||||
href={notice().url}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Open notice on {notice().name}
|
||||
<ExternalLink size={14} strokeWidth={2} />
|
||||
</a>
|
||||
)}
|
||||
</Show>
|
||||
</div>
|
||||
|
||||
@@ -220,9 +227,7 @@ export function ReleaseTabs(props: Props): JSX.Element {
|
||||
</div>
|
||||
<div id={`${id}-panel`} role="tabpanel" aria-labelledby={`${id}-tab-${selected()}`}>
|
||||
<Show when={releases()[selected()]} keyed>
|
||||
{(release) => (
|
||||
<ReleasePanel release={release} isFromFindATender={props.isFromFindATender} />
|
||||
)}
|
||||
{(release) => <ReleasePanel release={release} site={props.site} />}
|
||||
</Show>
|
||||
</div>
|
||||
</Show>
|
||||
|
||||
Reference in new issue
Block a user