Skip to content

Commit 7b8657c

Browse files
Merge pull request #371 from CivicDataLab/fix/required-indicator
Fix/required indicator
2 parents d8a55dd + d954120 commit 7b8657c

16 files changed

Lines changed: 407 additions & 220 deletions

File tree

app/[locale]/(user)/aimodels/[modelId]/components/Metadata/index.tsx

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,11 @@ export default function Metadata({ data }: MetadataProps) {
6666
};
6767

6868
// Get primary version info
69-
const primaryVersion = data.versions?.find((v: any) => v.isLatest) || data.versions?.[0];
70-
const primaryProvider = primaryVersion?.providers?.find((p: any) => p.isPrimary) || primaryVersion?.providers?.[0];
69+
const primaryVersion =
70+
data.versions?.find((v: any) => v.isLatest) || data.versions?.[0];
71+
const primaryProvider =
72+
primaryVersion?.providers?.find((p: any) => p.isPrimary) ||
73+
primaryVersion?.providers?.[0];
7174

7275
const providerLabels: Record<string, string> = {
7376
OPENAI: 'OpenAI',
@@ -151,7 +154,10 @@ export default function Metadata({ data }: MetadataProps) {
151154
{/* Domain */}
152155
{data.domain && (
153156
<div className="flex items-center gap-2">
154-
<Text className="min-w-[120px] basis-1/4 uppercase" variant="bodyMd">
157+
<Text
158+
className="min-w-[120px] basis-1/4 uppercase"
159+
variant="bodyMd"
160+
>
155161
Domain
156162
</Text>
157163
<Text variant="bodyLg" fontWeight="medium">
@@ -163,31 +169,46 @@ export default function Metadata({ data }: MetadataProps) {
163169
{/* Source/Provider */}
164170
{primaryProvider && (
165171
<div className="flex items-center gap-2">
166-
<Text className="min-w-[120px] basis-1/4 uppercase" variant="bodyMd">
172+
<Text
173+
className="min-w-[120px] basis-1/4 uppercase"
174+
variant="bodyMd"
175+
>
167176
Source
168177
</Text>
169-
<Text variant="bodyLg" fontWeight="medium" className="text-primaryBlue">
170-
{providerLabels[primaryProvider.provider] || primaryProvider.provider}
178+
<Text
179+
variant="bodyLg"
180+
fontWeight="medium"
181+
className="text-primaryBlue"
182+
>
183+
{providerLabels[primaryProvider.provider] ||
184+
primaryProvider.provider}
171185
</Text>
172186
</div>
173187
)}
174188

175189
{/* License */}
176190
{data.metadata?.usageLicense && (
177191
<div className="flex gap-2">
178-
<Text className="min-w-[120px] basis-1/4 uppercase" variant="bodyMd">
192+
<Text
193+
className="min-w-[120px] basis-1/4 uppercase"
194+
variant="bodyMd"
195+
>
179196
License
180197
</Text>
181198
<Text variant="bodyLg" fontWeight="medium">
182-
{licenseLabels[data.metadata.usageLicense] || data.metadata.usageLicense}
199+
{licenseLabels[data.metadata.usageLicense] ||
200+
data.metadata.usageLicense}
183201
</Text>
184202
</div>
185203
)}
186204

187205
{/* Sectors */}
188206
{data.sectors && data.sectors.length > 0 && (
189207
<div className="flex gap-2">
190-
<Text className="min-w-[120px] basis-1/4 uppercase" variant="bodyMd">
208+
<Text
209+
className="min-w-[120px] basis-1/4 uppercase"
210+
variant="bodyMd"
211+
>
191212
Sector
192213
</Text>
193214
<div className="flex flex-wrap gap-2">
@@ -209,7 +230,10 @@ export default function Metadata({ data }: MetadataProps) {
209230
{/* Geographies */}
210231
{data.geographies && data.geographies.length > 0 && (
211232
<div className="flex items-center gap-2">
212-
<Text className="min-w-[120px] basis-1/4 uppercase" variant="bodyMd">
233+
<Text
234+
className="min-w-[120px] basis-1/4 uppercase"
235+
variant="bodyMd"
236+
>
213237
Geography
214238
</Text>
215239
<div className="flex flex-wrap gap-2">
@@ -226,7 +250,6 @@ export default function Metadata({ data }: MetadataProps) {
226250
</div>
227251
</div>
228252
)}
229-
230253
</div>
231254
</div>
232255
);

app/[locale]/(user)/collaboratives/CollaborativesListingClient.tsx

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,7 @@ import { Icons } from '@/components/icons';
1414
import JsonLd from '@/components/JsonLd';
1515
import { Loading } from '@/components/loading';
1616
import Styles from '../datasets/dataset.module.scss';
17-
18-
// Helper function to strip markdown and HTML tags for card preview
19-
const stripMarkdown = (markdown: string): string => {
20-
if (!markdown) return '';
21-
return markdown
22-
.replace(/```[\s\S]*?```/g, '')
23-
.replace(/`([^`]+)`/g, '$1')
24-
.replace(/!\[([^\]]*)\]\([^)]+\)/g, '$1')
25-
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
26-
.replace(/^#{1,6}\s+/gm, '')
27-
.replace(/\*\*([^*]+)\*\*/g, '$1')
28-
.replace(/__([^_]+)__/g, '$1')
29-
.replace(/\*([^*]+)\*/g, '$1')
30-
.replace(/_([^_]+)_/g, '$1')
31-
.replace(/~~([^~]+)~~/g, '$1')
32-
.replace(/^\s*>\s+/gm, '')
33-
.replace(/^(-{3,}|_{3,}|\*{3,})$/gm, '')
34-
.replace(/^\s*[-*+]\s+/gm, '')
35-
.replace(/^\s*\d+\.\s+/gm, '')
36-
.replace(/<[^>]*>/g, '')
37-
.replace(/\n\s*\n/g, '\n')
38-
.replace(/\n/g, ' ')
39-
.replace(/\s+/g, ' ')
40-
.trim();
41-
};
17+
import { stripMarkdown } from '../search/components/UnifiedListingComponent';
4218

4319
const PublishedCollaboratives = graphql(`
4420
query PublishedCollaboratives {
@@ -367,7 +343,7 @@ const CollaborativesListingClient = () => {
367343
label: 'Published by',
368344
},
369345
]}
370-
description={stripMarkdown(collaborative.summary || '')}
346+
description={`rest ${stripMarkdown(collaborative.summary || '')}`}
371347
/>
372348
)
373349
)}

app/[locale]/(user)/components/Datasets.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
import { cn } from '@/lib/utils';
1818
import { Icons } from '@/components/icons';
1919
import { DatasetListingSkeleton } from '@/components/loading';
20+
import { stripMarkdown } from '../search/components/UnifiedListingComponent';
2021
import Styles from './datasets.module.scss';
2122

2223
interface Bucket {
@@ -65,7 +66,7 @@ const Datasets = () => {
6566
<div>
6667
<Button
6768
kind="tertiary"
68-
className="bg-transparent border-none shadow-none text-primaryText px-0 hover:underline"
69+
className="shadow-none border-none bg-transparent px-0 text-primaryText hover:underline"
6970
onClick={() => {
7071
router.push('/datasets');
7172
}}
@@ -98,7 +99,7 @@ const Datasets = () => {
9899
{' '}
99100
<Card
100101
title={item.title}
101-
description={item.description}
102+
description={stripMarkdown(item.description)}
102103
metadataContent={[
103104
{
104105
icon: Icons.calendar as any,

app/[locale]/(user)/components/UseCases.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { GraphQL } from '@/lib/api';
1818
import { cn, formatDate } from '@/lib/utils';
1919
import { Icons } from '@/components/icons';
2020
import { UseCaseListingSkeleton } from '@/components/loading';
21+
import { stripMarkdown } from '../search/components/UnifiedListingComponent';
2122
import Styles from './datasets.module.scss';
2223

2324
const useCasesListDoc: any = graphql(`
@@ -110,7 +111,7 @@ const UseCasesListingPage = () => {
110111
<div>
111112
<Button
112113
kind="tertiary"
113-
className="bg-transparent border-none shadow-none text-primaryText px-0 hover:underline"
114+
className="shadow-none border-none bg-transparent px-0 text-primaryText hover:underline"
114115
onClick={() => {
115116
router.push('/usecases');
116117
}}
@@ -181,7 +182,7 @@ const UseCasesListingPage = () => {
181182
},
182183
]}
183184
imageUrl={`${process.env.NEXT_PUBLIC_BACKEND_URL}/${item.logo?.path.replace('/code/files/', '')}`}
184-
description={item.summary}
185+
description={stripMarkdown(item.summary)}
185186
iconColor="metadata"
186187
variation={'collapsed'}
187188
type={[

app/[locale]/dashboard/[entityType]/[entitySlug]/aimodels/edit/[id]/details/page.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import {
1616
} from 'opub-ui';
1717
import { useEffect, useState } from 'react';
1818

19-
import RichTextEditor from '@/components/RichTextEditor/RichTextEditor';
2019
import { GraphQL } from '@/lib/api';
20+
import RichTextEditor from '@/components/RichTextEditor/RichTextEditor';
2121
import { useEditStatus } from '../../context';
2222

2323
const tagsListQueryDoc: any = graphql(`
@@ -170,7 +170,12 @@ export default function AIModelDetailsPage() {
170170
)
171171
);
172172

173-
const AIModelData: { data: any; isLoading: boolean; refetch: any; error: any } = useQuery(
173+
const AIModelData: {
174+
data: any;
175+
isLoading: boolean;
176+
refetch: any;
177+
error: any;
178+
} = useQuery(
174179
[`fetch_AIModelDetails_${params.id}`],
175180
() =>
176181
GraphQL(
@@ -266,8 +271,10 @@ export default function AIModelDetailsPage() {
266271
})) || [],
267272
modelWebsite: metadata.modelWebsite || '',
268273
geographies:
269-
model.geographies?.map((g: any) => ({ label: g.name, value: g.id })) ||
270-
[],
274+
model.geographies?.map((g: any) => ({
275+
label: g.name,
276+
value: g.id,
277+
})) || [],
271278
usageLicense: metadata.usageLicense || '',
272279
accessType: model.isPublic ? 'open' : 'restricted',
273280
});
@@ -319,7 +326,9 @@ export default function AIModelDetailsPage() {
319326
domain: dataToUse.domain || null,
320327
tags: dataToUse.tags.map((item: any) => item.label),
321328
sectors: dataToUse.sectors.map((item: any) => item.label),
322-
geographies: dataToUse.geographies.map((item: any) => parseInt(item.value, 10)),
329+
geographies: dataToUse.geographies.map((item: any) =>
330+
parseInt(item.value, 10)
331+
),
323332
supportedLanguages: dataToUse.supportedLanguages.map(
324333
(item: any) => item.value
325334
),
@@ -425,6 +434,7 @@ export default function AIModelDetailsPage() {
425434
<Select
426435
name="modelType"
427436
label="Model Type"
437+
requiredIndicator={true}
428438
options={modelTypeOptions}
429439
value={formData.modelType}
430440
onChange={(value) => {
@@ -467,6 +477,7 @@ export default function AIModelDetailsPage() {
467477
onBlur={() => handleSave()}
468478
multiline={3}
469479
required
480+
requiredIndicator={true}
470481
/>
471482
<TextField
472483
name="intendedUse"
@@ -476,6 +487,7 @@ export default function AIModelDetailsPage() {
476487
onBlur={() => handleSave()}
477488
multiline={3}
478489
required
490+
requiredIndicator={true}
479491
/>
480492
</FormLayout.Group>
481493
</FormLayout>
@@ -498,6 +510,7 @@ export default function AIModelDetailsPage() {
498510
handleSave({ ...formData, sectors: value });
499511
}}
500512
required
513+
requiredIndicator={true}
501514
/>
502515

503516
{/* Tags */}
@@ -534,6 +547,7 @@ export default function AIModelDetailsPage() {
534547
handleSave({ ...formData, maxTokens: value });
535548
}}
536549
required
550+
requiredIndicator={true}
537551
/>
538552
<Combobox
539553
displaySelected
@@ -547,6 +561,7 @@ export default function AIModelDetailsPage() {
547561
handleSave({ ...formData, supportedLanguages: value });
548562
}}
549563
required
564+
requiredIndicator={true}
550565
/>
551566
</FormLayout.Group>
552567
</FormLayout>
@@ -562,6 +577,7 @@ export default function AIModelDetailsPage() {
562577
onBlur={handleWebsiteBlur}
563578
placeholder="www.model.com"
564579
required
580+
requiredIndicator={true}
565581
/>
566582
<Combobox
567583
displaySelected

0 commit comments

Comments
 (0)