summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src-migrate/validations/tempo.ts6
-rw-r--r--src/lib/pengajuan-tempo/component/Konfirmasi.jsx4
-rw-r--r--src/lib/pengajuan-tempo/component/KontakPerusahaan.jsx36
-rw-r--r--src/lib/pengajuan-tempo/component/PengajuanTempo.jsx9
-rw-r--r--src/lib/pengajuan-tempo/component/Pengiriman.jsx214
-rw-r--r--src/lib/pengajuan-tempo/component/Referensi.jsx2
-rw-r--r--src/lib/pengajuan-tempo/component/informasiPerusahaan.jsx103
7 files changed, 239 insertions, 135 deletions
diff --git a/src-migrate/validations/tempo.ts b/src-migrate/validations/tempo.ts
index bc3a1d28..f019275c 100644
--- a/src-migrate/validations/tempo.ts
+++ b/src-migrate/validations/tempo.ts
@@ -35,7 +35,7 @@ export const TempoSchema = z.object({
export const TempoSchemaKontakPerson = z.object({
direkturName: z.string().min(1, { message: 'Nama harus diisi' }),
- direkturTittle: z.string().min(1, { message: 'Nama harus diisi' }),
+ direkturTittle: z.string().min(1, { message: 'Tittle harus dipilih' }),
financeName: z.string().min(1, { message: 'Nama harus diisi' }),
direkturMobile: z.string().optional(),
financeMobile: z
@@ -44,8 +44,8 @@ export const TempoSchemaKontakPerson = z.object({
.refine((val) => /^\d{10,12}$/.test(val), {
message: 'Format nomor telepon tidak valid, contoh: 081234567890',
}),
- purchasingTittle: z.string().min(1, { message: 'Nama harus diisi' }),
- financeTittle: z.string().min(1, { message: 'Nama harus diisi' }),
+ purchasingTittle: z.string().min(1, { message: 'Tittle harus dipilih' }),
+ financeTittle: z.string().min(1, { message: 'Tittle harus dipilih' }),
purchasingMobile: z
.string()
.min(1, { message: 'Nomor telepon harus diisi' })
diff --git a/src/lib/pengajuan-tempo/component/Konfirmasi.jsx b/src/lib/pengajuan-tempo/component/Konfirmasi.jsx
index 78591c48..0e593ac4 100644
--- a/src/lib/pengajuan-tempo/component/Konfirmasi.jsx
+++ b/src/lib/pengajuan-tempo/component/Konfirmasi.jsx
@@ -172,9 +172,7 @@ const Konfirmasi = ({ chekValid, buttonSubmitClick }) => {
setValue('industry_id', parseInt(form.industry_id));
}
}, [form]);
- const handleLabelClick = () => {
- setIndustriesOpen(!industriesOpen);
- };
+
return (
<>
{isDesktop && (
diff --git a/src/lib/pengajuan-tempo/component/KontakPerusahaan.jsx b/src/lib/pengajuan-tempo/component/KontakPerusahaan.jsx
index b3d5bce7..e937baec 100644
--- a/src/lib/pengajuan-tempo/component/KontakPerusahaan.jsx
+++ b/src/lib/pengajuan-tempo/component/KontakPerusahaan.jsx
@@ -130,9 +130,12 @@ const KontakPerusahaan = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
</div>
{chekValid && (
- <div className='text-caption-2 text-danger-500 mt-1'>
- {errorsKontakPerson.direkturName}
- </div>
+ <>
+ <div className='text-caption-2 text-danger-500 mt-1'>
+ {errorsKontakPerson.direkturName}{' '}
+ {errorsKontakPerson.direkturTittle}
+ </div>
+ </>
)}
</div>
</div>
@@ -230,9 +233,12 @@ const KontakPerusahaan = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
</div>
{chekValid && (
- <div className='text-caption-2 text-danger-500 mt-1'>
- {errorsKontakPerson.purchasingName}
- </div>
+ <>
+ <div className='text-caption-2 text-danger-500 mt-1'>
+ {errorsKontakPerson.purchasingName}{' '}
+ {errorsKontakPerson.purchasingTittle}
+ </div>
+ </>
)}
</div>
</div>
@@ -339,9 +345,12 @@ const KontakPerusahaan = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
</div>
{chekValid && (
- <div className='text-caption-2 text-danger-500 mt-1'>
- {errorsKontakPerson.financeName}
- </div>
+ <>
+ <div className='text-caption-2 text-danger-500 mt-1'>
+ {errorsKontakPerson.financeName}{' '}
+ {errorsKontakPerson.financeTittle}
+ </div>
+ </>
)}
</div>
</div>
@@ -454,7 +463,8 @@ const KontakPerusahaan = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
</div>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errorsKontakPerson.direkturName}
+ {errorsKontakPerson.direkturName}{' '}
+ {errorsKontakPerson.direkturTittle}
</div>
)}
</div>
@@ -536,7 +546,8 @@ const KontakPerusahaan = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
</div>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errorsKontakPerson.purchasingName}
+ {errorsKontakPerson.purchasingName}{' '}
+ {errorsKontakPerson.purchasingTittle}
</div>
)}
</div>
@@ -615,7 +626,8 @@ const KontakPerusahaan = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
</div>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errorsKontakPerson.financeName}
+ {errorsKontakPerson.financeName}{' '}
+ {errorsKontakPerson.financeTittle}
</div>
)}
</div>
diff --git a/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx b/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
index d7c1dfac..22227624 100644
--- a/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
+++ b/src/lib/pengajuan-tempo/component/PengajuanTempo.jsx
@@ -33,7 +33,7 @@ const PengajuanTempo = () => {
const { isDesktop, isMobile } = useDevice();
const [currentStep, setCurrentStep] = React.useState(0);
const NUMBER_OF_STEPS = 6;
- const [isLoading, setIsLoading] = useState(true);
+ const [isLoading, setIsLoading] = useState(false);
const [bigData, setBigData] = useState();
const [idTempo, setIdTempo] = useState(0);
const { form, errors, validate, updateForm } = usePengajuanTempoStore();
@@ -547,9 +547,10 @@ const PengajuanTempo = () => {
const handleCheckChange = (checked) => {
setIsCheckedTNC(checked);
};
- if (isLoading && !bigData) {
- return;
- }
+ // if (isLoading && !bigData) {
+ // return;
+ // }
+ console.log('bigData', bigData);
return (
<>
<div className='container flex flex-col items-center '>
diff --git a/src/lib/pengajuan-tempo/component/Pengiriman.jsx b/src/lib/pengajuan-tempo/component/Pengiriman.jsx
index 068cf73c..11586267 100644
--- a/src/lib/pengajuan-tempo/component/Pengiriman.jsx
+++ b/src/lib/pengajuan-tempo/component/Pengiriman.jsx
@@ -34,14 +34,6 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
const [zipsInvoice, setZipsInvoice] = useState([]);
const [sameAddress, setSameAddress] = useState(false);
const [sameAddressStreet, setSameAddressStreet] = useState(false);
- const [everyWeekday, setEveryWeekday] = useState(false);
- const [everyWeek, setEveryWeek] = useState(false);
- const [tukarInvoice, setTukarInvoice] = useState(false);
- const [everyWeekdayPembayaran, setEveryWeekdayPembayaran] = useState(false);
- const [everyWeekPembayaran, setEveryWeekPembayaran] = useState(false);
- const [tukarInvoicePembayaran, setTukarInvoicePembayaran] = useState(false);
- const [selectedRadio, setSelectedRadio] = useState('');
- const [selectedRadioInvoice, setSelectedRadioInvoice] = useState('');
const [selectedIds, setSelectedIds] = useState(
formPengiriman.dokumenPengiriman
@@ -306,46 +298,6 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
updateFormPengiriman(name, value);
validatePengiriman();
};
- const handleRadioChange = (value) => {
- setSelectedRadio(value);
- if (value == 'everyWeekday') {
- setEveryWeekday(!everyWeekday);
- } else if (value == 'everyWeek') {
- setEveryWeek(!everyWeek);
- } else {
- setTukarInvoice(!tukarInvoice);
- }
- validatePengiriman();
- };
- const handleRadioChangeInvoice = (value) => {
- setSelectedRadioInvoice(value);
- if (value == 'everyWeekdayPembayaran') {
- setEveryWeekdayPembayaran(!everyWeekdayPembayaran);
- } else if (value == 'everyWeekPembayaran') {
- setEveryWeekPembayaran(!everyWeekPembayaran);
- } else {
- setTukarInvoicePembayaran(!tukarInvoicePembayaran);
- }
- validatePengiriman();
- };
- const handleEveryWeekday = () => {
- setEveryWeekday(!everyWeekday);
- };
- const handleEveryWeek = () => {
- setEveryWeek(!everyWeek);
- };
- const handleTukarInvoice = () => {
- setTukarInvoice(!tukarInvoice);
- };
- const handleEveryWeekdayPembayaran = () => {
- setEveryWeekdayPembayaran(!everyWeekdayPembayaran);
- };
- const handleEveryWeekPembayaran = () => {
- setEveryWeekPembayaran(!everyWeekPembayaran);
- };
- const handleTukarInvoicePembayaran = () => {
- setTukarInvoicePembayaran(!tukarInvoicePembayaran);
- };
const isFormValid = useMemo(
() => Object.keys(errorsPengiriman).length === 0,
@@ -842,7 +794,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
</div>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errorsPengiriman.PICName}
+ {errorsPengiriman.PICName} {errorsPengiriman.PICTittle}
</div>
)}
</div>
@@ -968,7 +920,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.subDistrictPengiriman}
+ {errorsPengiriman.subDistrictPengiriman}
</div>
)}
</div>
@@ -987,7 +939,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.subDistrictPengiriman}
+ {errorsPengiriman.subDistrictPengiriman}
</div>
)}
</div>
@@ -996,19 +948,39 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
name='zipPengiriman'
control={control}
render={(props) => (
- <HookFormSelect
- {...props}
- options={zips}
- disabled={
- !watchsubDistrict || sameAddressStreet
- }
- placeholder='Zip'
- />
+ <>
+ {/* Jika zips tidak kosong, tampilkan dropdown */}
+ {zips.length > 0 ? (
+ <HookFormSelect
+ {...props}
+ options={zips}
+ disabled={
+ !watchsubDistrict || sameAddressStreet
+ }
+ placeholder='Zip'
+ />
+ ) : (
+ // Jika zips kosong, tampilkan input manual
+ <input
+ id='zipPengiriman'
+ name='zipPengiriman'
+ ref={zipRef}
+ placeholder='Kode Pos'
+ type='number'
+ disabled={
+ !watchsubDistrict || sameAddressStreet
+ }
+ value={formPengiriman.zipPengiriman}
+ className='form-input'
+ onChange={handleInputChange}
+ />
+ )}
+ </>
)}
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.zipPengiriman}
+ {errorsPengiriman.zipPengiriman}
</div>
)}
</div>
@@ -1054,7 +1026,8 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
</div>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errorsPengiriman.invoicePic}
+ {errorsPengiriman.invoicePic}{' '}
+ {errorsPengiriman.invoicePicTittle}
</div>
)}
</div>
@@ -1186,7 +1159,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.districtInvoice}
+ {errorsPengiriman.districtInvoice}
</div>
)}
</div>
@@ -1205,7 +1178,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.subDistrictsInvoice}
+ {errorsPengiriman.subDistrictsInvoice}
</div>
)}
</div>
@@ -1214,19 +1187,37 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
name='zipInvoice'
control={control}
render={(props) => (
- <HookFormSelect
- {...props}
- options={zipsInvoice}
- disabled={
- !watchsubDistrictInvoice || sameAddress
- }
- placeholder='Zip'
- />
+ <>
+ {zipsInvoice.length > 0 ? (
+ <HookFormSelect
+ {...props}
+ options={zipsInvoice}
+ disabled={
+ !watchsubDistrictInvoice || sameAddress
+ }
+ placeholder='Zip'
+ />
+ ) : (
+ <input
+ id='zipInvoice'
+ name='zipInvoice'
+ ref={zipInvoiceRef}
+ placeholder='Kode Pos'
+ type='number'
+ disabled={
+ !watchsubDistrictInvoice || sameAddress
+ }
+ value={formPengiriman.zipInvoice}
+ className='form-input'
+ onChange={handleInputChange}
+ />
+ )}
+ </>
)}
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.zipInvoice}
+ {errorsPengiriman.zipInvoice}
</div>
)}
</div>
@@ -1486,7 +1477,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
</div>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errorsPengiriman.PICName}
+ {errorsPengiriman.PICName} {errorsPengiriman.PICTittle}
</div>
)}
</div>
@@ -1607,7 +1598,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.subDistrictPengiriman}
+ {errorsPengiriman.subDistrictPengiriman}
</div>
)}
</div>
@@ -1626,7 +1617,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.subDistrictPengiriman}
+ {errorsPengiriman.subDistrictPengiriman}
</div>
)}
</div>
@@ -1635,17 +1626,35 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
name='zipPengiriman'
control={control}
render={(props) => (
- <HookFormSelect
- {...props}
- options={zips}
- disabled={!watchsubDistrict || sameAddressStreet}
- placeholder='Zip'
- />
+ <>
+ {/* Jika zips tidak kosong, tampilkan dropdown */}
+ {zips.length > 0 ? (
+ <HookFormSelect
+ {...props}
+ options={zips}
+ disabled={!watchsubDistrict || sameAddressStreet}
+ placeholder='Zip'
+ />
+ ) : (
+ // Jika zips kosong, tampilkan input manual
+ <input
+ id='zipPengiriman'
+ name='zipPengiriman'
+ ref={zipRef}
+ placeholder='Kode Pos'
+ type='number'
+ disabled={!watchsubDistrict || sameAddressStreet}
+ value={formPengiriman.zipPengiriman}
+ className='form-input'
+ onChange={handleInputChange}
+ />
+ )}
+ </>
)}
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.zipPengiriman}
+ {errorsPengiriman.zipPengiriman}
</div>
)}
</div>
@@ -1685,7 +1694,8 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
</div>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errorsPengiriman.invoicePic}
+ {errorsPengiriman.invoicePic}{' '}
+ {errorsPengiriman.invoicePicTittle}
</div>
)}
</div>
@@ -1793,7 +1803,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.districtInvoice}
+ {errorsPengiriman.districtInvoice}
</div>
)}
</div>
@@ -1812,7 +1822,7 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.subDistrictsInvoice}
+ {errorsPengiriman.subDistrictsInvoice}
</div>
)}
</div>
@@ -1821,17 +1831,37 @@ const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => {
name='zipInvoice'
control={control}
render={(props) => (
- <HookFormSelect
- {...props}
- options={zipsInvoice}
- disabled={!watchsubDistrictInvoice || sameAddress}
- placeholder='Zip'
- />
+ <>
+ {zipsInvoice.length > 0 ? (
+ <HookFormSelect
+ {...props}
+ options={zipsInvoice}
+ disabled={
+ !watchsubDistrictInvoice || sameAddress
+ }
+ placeholder='Zip'
+ />
+ ) : (
+ <input
+ id='zipInvoice'
+ name='zipInvoice'
+ ref={zipInvoiceRef}
+ placeholder='Kode Pos'
+ type='number'
+ disabled={
+ !watchsubDistrictInvoice || sameAddress
+ }
+ value={formPengiriman.zipInvoice}
+ className='form-input'
+ onChange={handleInputChange}
+ />
+ )}
+ </>
)}
/>
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
- {errors.zipInvoice}
+ {errorsPengiriman.zipInvoice}
</div>
)}
</div>
diff --git a/src/lib/pengajuan-tempo/component/Referensi.jsx b/src/lib/pengajuan-tempo/component/Referensi.jsx
index 38693d18..8db321d1 100644
--- a/src/lib/pengajuan-tempo/component/Referensi.jsx
+++ b/src/lib/pengajuan-tempo/component/Referensi.jsx
@@ -415,7 +415,7 @@ const Referensi = ({ chekValid, buttonSubmitClick, data }) => {
<h2 className='py-2 font-semibold text-base'>
Daftar Nama Supplier
</h2>
- <div className='h-[2px] bg-gray-300 w-[120%] inset-0 relative transform -translate-x-5'></div>
+ {/* <div className='h-[2px] bg-gray-300 w-[120%] inset-0 relative transform -translate-x-5'></div> */}
<div className=''>
{supplierData.map((supplier, index) => (
<div key={index}>
diff --git a/src/lib/pengajuan-tempo/component/informasiPerusahaan.jsx b/src/lib/pengajuan-tempo/component/informasiPerusahaan.jsx
index 9850e927..4bc04a3f 100644
--- a/src/lib/pengajuan-tempo/component/informasiPerusahaan.jsx
+++ b/src/lib/pengajuan-tempo/component/informasiPerusahaan.jsx
@@ -73,9 +73,9 @@ const InformasiPerusahaan = ({
const watchState = watch('state');
useEffect(() => {
- setValue('city', '');
- setValue('district', '');
- setValue('subDistrict', '');
+ // setValue('city', '');
+ // setValue('district', '');
+ // setValue('subDistrict', '');
if (watchState) {
updateForm('state', `${watchState}`);
validate();
@@ -133,6 +133,15 @@ const InformasiPerusahaan = ({
useEffect(() => {
let kelurahan = '';
+ let kecamatan = '';
+
+ if (watchDistrict) {
+ for (const data in districts) {
+ if (districts[data].value == watchDistrict) {
+ kecamatan = districts[data].label.toLowerCase();
+ }
+ }
+ }
if (watchsubDistrict) {
updateForm('subDistrict', `${watchsubDistrict}`);
@@ -147,13 +156,30 @@ const InformasiPerusahaan = ({
`https://alamat.thecloudalert.com/api/cari/index/?keyword=${kelurahan}`
);
+ let dataMasuk = []; // Array untuk menyimpan kode pos yang sudah diproses
+
const result = await response.json();
- const dataZips = result.result.map((zip) => ({
- value: parseInt(zip.kodepos),
- label: zip.kodepos,
- }));
- setZips(dataZips);
+
+ // Filter dan map data
+ const dataZips = result.result
+ .filter((zip) => zip.kecamatan.toLowerCase() === kecamatan) // Filter berdasarkan kecamatan
+ .filter((zip) => {
+ // Pastikan zip.kodepos belum ada di dataMasuk
+ if (dataMasuk.includes(zip.kodepos)) {
+ return false; // Jika sudah ada, maka skip (tidak akan ditambahkan)
+ } else {
+ dataMasuk.push(zip.kodepos); // Tambahkan ke dataMasuk
+ return true; // Tambahkan zip ke hasil
+ }
+ })
+ .map((zip) => ({
+ value: parseInt(zip.kodepos),
+ label: zip.kodepos,
+ }));
+
+ setZips(dataZips); // Set hasil ke state
};
+
loadZip();
}
}, [watchsubDistrict, setValue, subDistricts]);
@@ -744,14 +770,33 @@ const InformasiPerusahaan = ({
name='zip'
control={control}
render={(props) => (
- <HookFormSelect
- {...props}
- options={zips}
- disabled={!watchsubDistrict}
- placeholder='Zip'
- />
+ <>
+ {/* Jika zips tidak kosong, tampilkan dropdown */}
+ {zips.length > 0 ? (
+ <HookFormSelect
+ {...props}
+ options={zips}
+ disabled={!watchsubDistrict}
+ placeholder='Zip'
+ />
+ ) : (
+ // Jika zips kosong, tampilkan input manual
+ <input
+ id='zip'
+ name='zip'
+ ref={zipRef}
+ placeholder='Kode Pos'
+ type='number'
+ disabled={!watchsubDistrict}
+ value={form.zip}
+ className='form-input'
+ onChange={handleInputChange}
+ />
+ )}
+ </>
)}
/>
+
{chekValid && (
<div className='text-caption-2 text-danger-500 mt-1'>
{errors.zip}
@@ -1276,12 +1321,30 @@ const InformasiPerusahaan = ({
name='zip'
control={control}
render={(props) => (
- <HookFormSelect
- {...props}
- options={zips}
- disabled={!watchsubDistrict}
- placeholder='Zip'
- />
+ <>
+ {/* Jika zips tidak kosong, tampilkan dropdown */}
+ {zips.length > 0 ? (
+ <HookFormSelect
+ {...props}
+ options={zips}
+ disabled={!watchsubDistrict}
+ placeholder='Zip'
+ />
+ ) : (
+ // Jika zips kosong, tampilkan input manual
+ <input
+ id='zip'
+ name='zip'
+ ref={zipRef}
+ placeholder='Kode Pos'
+ type='number'
+ disabled={!watchsubDistrict}
+ value={form.zip}
+ className='form-input'
+ onChange={handleInputChange}
+ />
+ )}
+ </>
)}
/>
{chekValid && (