Skip to content

Commit 8237671

Browse files
committed
feat: full edit shelter and improved interface of pet friendly in shelter page
1 parent 2828388 commit 8237671

File tree

14 files changed

+177
-44
lines changed

14 files changed

+177
-44
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Fragment, useContext } from 'react';
2+
3+
import { SessionContext } from '@/contexts';
4+
5+
const Authenticated = ({ children }: { children?: React.ReactNode }) => {
6+
const { session } = useContext(SessionContext);
7+
8+
if (!session) return <Fragment />;
9+
10+
return <div className="contents">{children}</div>;
11+
};
12+
13+
export { Authenticated };
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { Authenticated } from './Authenticated';
2+
3+
export { Authenticated };

src/components/CardAboutShelter/CardAboutShelter.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,22 @@ const CardAboutShelter = (props: ICardAboutShelter) => {
2424
<div className="flex flex-col flex-wrap gap-3">
2525
<InfoRow icon={<Home />} label={shelter.address} />
2626
<InfoRow
27+
className=""
2728
icon={<PawPrint />}
2829
label={
29-
check(shelter.petFriendly)
30-
? shelter.petFriendly
31-
? 'O abrigo aceita animais'
32-
: 'O abrigo não aceita animais'
33-
: 'Não informado se aceita animais'
30+
check(shelter.petFriendly) ? (
31+
shelter.petFriendly ? (
32+
<p>
33+
O abrigo <b className="text-green-600">aceita</b> animais
34+
</p>
35+
) : (
36+
<p>
37+
O abrigo <b className="text-red-600">não</b> aceita animais
38+
</p>
39+
)
40+
) : (
41+
<b>Não informado se aceita animais</b>
42+
)
3443
}
3544
/>
3645
<InfoRow
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export interface IInfoRowProps extends React.ComponentPropsWithoutRef<'div'> {
2-
label: string;
2+
label: React.ReactNode;
33
value?: string;
44
icon: React.ReactNode;
55
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import React from 'react';
2+
3+
import {
4+
Select,
5+
SelectContent,
6+
SelectItem,
7+
SelectTrigger,
8+
SelectValue,
9+
} from '../ui/select';
10+
import { ISelectComponentProps } from './types';
11+
import { cn } from '@/lib/utils';
12+
13+
const SelectField = React.forwardRef<HTMLDivElement, ISelectComponentProps>(
14+
(props, ref) => {
15+
const {
16+
onSelectChange,
17+
options,
18+
value,
19+
label,
20+
className = '',
21+
...rest
22+
} = props;
23+
24+
return (
25+
<div ref={ref} className={cn('w-full', className)} {...rest}>
26+
<label className="text-muted-foreground">{label}</label>
27+
<Select
28+
value={value}
29+
onValueChange={(v) =>
30+
onSelectChange ? onSelectChange(v) : undefined
31+
}
32+
>
33+
<SelectTrigger className="w-full">
34+
<SelectValue className="text-muted-foreground" />
35+
</SelectTrigger>
36+
<SelectContent>
37+
{options.map((option, idx) => (
38+
<SelectItem key={idx} value={option.value}>
39+
{option.label}
40+
</SelectItem>
41+
))}
42+
</SelectContent>
43+
</Select>
44+
</div>
45+
);
46+
}
47+
);
48+
49+
export { SelectField };
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { SelectField } from './SelectField';
2+
3+
export { SelectField };
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface ISelectComponentProps
2+
extends React.ComponentPropsWithoutRef<'div'> {
3+
label: string;
4+
value: string;
5+
onSelectChange?: (v: string) => void;
6+
options: { label: string; value: string }[];
7+
}

src/components/TextField/TextField.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const TextField = forwardRef<React.ElementRef<'input'>, TextFieldProps>(
1414
className,
1515
error,
1616
helperText,
17+
value = '',
1718
...rest
1819
} = props;
1920

@@ -29,6 +30,7 @@ const TextField = forwardRef<React.ElementRef<'input'>, TextFieldProps>(
2930
ref={ref}
3031
name={name}
3132
className={cn(error ? 'border-[1px] border-red-600' : '', className)}
33+
value={value}
3234
{...rest}
3335
/>
3436
{helperText && (

src/components/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { Chip } from './Chip';
1111
import { Footer } from './Footer';
1212
import { SearchInput } from './SearchInput';
1313
import { VerifiedBadge } from './VerifiedBadge';
14+
import { SelectField } from './SelectField';
15+
import { Authenticated } from './Authenticated';
1416

1517
export {
1618
LoadingScreen,
@@ -26,4 +28,6 @@ export {
2628
Footer,
2729
VerifiedBadge,
2830
SearchInput,
31+
SelectField,
32+
Authenticated,
2933
};

src/lib/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ function groupShelterSuppliesByTag(data: IUseSheltersDataSupplyData[]) {
138138
return Object.entries(grouped).reduce((prev, [category, values]) => {
139139
return {
140140
...prev,
141-
[category]: values.sort((a, b) => a.priority - b.priority),
141+
[category]: values.sort((a, b) => b.priority - a.priority),
142142
};
143143
}, initialGroup);
144144
}

0 commit comments

Comments
 (0)