style: add url input & form analyze layout adjustment

This commit is contained in:
Mahen 2026-03-03 10:08:28 +07:00
parent 5879a4ef95
commit e00a792f10
3 changed files with 37 additions and 37 deletions

View File

@ -1,25 +1,8 @@
import z from "zod"; import z from "zod";
// const brandEnum = z.enum([
// "APPLE",
// "ASUS",
// "ACER",
// "LENOVO",
// "HP",
// "DELL",
// "MSI",
// "AXIOO",
// "ADVAN",
// "ZYREX",
// "OTHER",
// ]);
// cony
export const analyzeSchema = z.object({ export const analyzeSchema = z.object({
// profession: professionEnum,
// brands: brandEnum,
url1: z.string().min(10, "Tautan 1 minimal 10 karakter"), url1: z.string().min(10, "Tautan 1 minimal 10 karakter"),
url2: z.string().min(10, "Tautan 2 minimal 10 karakter"), url2: z.string().min(10, "Tautan 2 minimal 10 karakter"),
url3: z.string().optional().or(z.literal("")), url3: z.string().min(10, "Tautan 3 minimal 10 karakter"),
url4: z.string().optional().or(z.literal("")),
}); });

View File

@ -8,15 +8,15 @@ import ResultSection from "./ResultSection";
export default function AnalysisClient() { export default function AnalysisClient() {
const { const {
register,
handleSubmit,
onSubmit,
errors, errors,
isValid, isValid,
loading, loading,
result, result,
showField, showField,
resultRef, resultRef,
register,
handleSubmit,
onSubmit,
setShowField, setShowField,
} = useAnalyseText(); } = useAnalyseText();
@ -87,9 +87,6 @@ export default function AnalysisClient() {
</p> </p>
)} )}
</div> </div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="w-full"> <div className="w-full">
<label className="block mb-1 text-sm font-medium text-gray-700"> <label className="block mb-1 text-sm font-medium text-gray-700">
Tautan Produk 2 Tautan Produk 2
@ -106,20 +103,39 @@ export default function AnalysisClient() {
</p> </p>
)} )}
</div> </div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="w-full">
<label className="block mb-1 text-sm font-medium text-gray-700">
Tautan Produk 3
</label>
<Input
type="text"
placeholder="Contoh: https://tokopedia.com/..."
className={`w-full ${errors.url3 ? "border-sentiment-negative" : "focus:ring-primary"}`}
{...register("url3")}
/>
{errors.url3 && (
<p className="text-sentiment-negative text-xs mt-1">
{errors.url3.message}
</p>
)}
</div>
<div className="w-full flex flex-col justify-end"> <div className="w-full flex flex-col justify-end">
{showField ? ( {showField ? (
<div className="animate-in fade-in slide-in-from-bottom-2 duration-300"> <div className="animate-in fade-in slide-in-from-bottom-2 duration-300">
<label className="block mb-1 text-sm font-medium text-gray-700"> <label className="block mb-1 text-sm font-medium text-gray-700">
Tautan Produk 3 Tautan Produk 4
</label> </label>
<div className="flex gap-2"> <div className="flex gap-2">
<div className="flex-1"> <div className="flex-1">
<Input <Input
type="text" type="text"
placeholder="Contoh: https://tokopedia.com/..." placeholder="Contoh: https://tokopedia.com/..."
className={`${errors.url3 ? "border-sentiment-negative" : "focus:ring-primary"}`} className={`${errors.url4 ? "border-sentiment-negative" : "focus:ring-primary"}`}
{...register("url3")} {...register("url4")}
/> />
</div> </div>
<Button <Button
@ -131,9 +147,9 @@ export default function AnalysisClient() {
</Button> </Button>
</div> </div>
{errors.url3 && ( {errors.url4 && (
<p className="text-sentiment-negative text-xs mt-1"> <p className="text-sentiment-negative text-xs mt-1">
{errors.url3.message} {errors.url4.message}
</p> </p>
)} )}
</div> </div>
@ -141,7 +157,7 @@ export default function AnalysisClient() {
<Button <Button
type="button" type="button"
onClick={() => setShowField(true)} onClick={() => setShowField(true)}
className="w-full h-10 bg-card text-primary hover:bg-[#F8FBFF] border-dashed border border-primary/20 transition-all shadow-xs" className="w-full h-max bg-card text-primary hover:bg-[#F8FBFF] border-dashed border border-primary/20 transition-all shadow-xs"
> >
+ Tambah Tautan Produk Lainnya + Tambah Tautan Produk Lainnya
</Button> </Button>

View File

@ -33,6 +33,7 @@ export const useAnalyseText = () => {
url1: "", url1: "",
url2: "", url2: "",
url3: "", url3: "",
url4: "",
}, },
}); });
@ -104,10 +105,10 @@ export const useAnalyseText = () => {
} }
setLoading(true); setLoading(true);
setResult(null); setResult(null);
try { try {
const urlsToScrape = [data.url1, data.url2, data.url3].filter( const urlsToScrape = [data.url1, data.url2, data.url3, data.url4].filter(
(url) => url && url.trim() !== "", (url) => url && url.trim() !== "",
) as string[]; ) as string[];
@ -157,16 +158,16 @@ export const useAnalyseText = () => {
return { return {
control, control,
register,
handleSubmit,
setValue,
onSubmit,
errors, errors,
isValid, isValid,
loading, loading,
result, result,
showField, showField,
resultRef, resultRef,
register,
handleSubmit,
setValue,
onSubmit,
setShowField, setShowField,
}; };
}; };