style: add url input & form analyze layout adjustment
This commit is contained in:
parent
5879a4ef95
commit
e00a792f10
|
|
@ -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("")),
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue