import { ChangeEvent, TargetedEvent, useEffect, useState } from "preact/compat"; import { getListRecentLocationsRatingsService, getProvincesService, getRegenciesService } from "../../services"; import { LocationInfo } from "../../domains/LocationInfo"; import { DropdownInput } from "../../components"; import { IndonesiaRegionsInfo, LocationType } from "../../types/common"; import { Regency, emptyRegency } from "../../domains"; import { Form } from './types'; import { enumKeys } from "../../utils"; import './style.css'; import { createLocationService } from "../../services/locations"; import { useSelector } from "react-redux"; import { UserRootState } from "../../store/type"; function AddLocation() { const [recentLocations, setRecentLocations] = useState>() const [idnRegions, setIdnRegions] = useState({ regencies: Array(), }) const [form, setForm] = useState
({ name: '', address: '', google_maps_link: '', location_type: LocationType.Beach, regency: emptyRegency(), thumbnails: [], }) const user = useSelector((state: UserRootState) => state.auth) const [pageState, setPageState] = useState({ regency_form_error: false, }) async function getRecentLocations() { try { const locations = await getListRecentLocationsRatingsService(9) setRecentLocations(locations.data) // setIsLoading(false) } catch (error) { console.log(error) } } async function getRegions() { try { const provinces = await getProvincesService(); const regencies = await getRegenciesService(); setIdnRegions({ provinces: provinces.data, regencies: regencies.data }) } catch (error) { console.log(error) } } async function onSubmitForm(e: TargetedEvent) { e.preventDefault(); if(form.regency.regency_name === '') { setPageState({ regency_form_error: true }) return } let tempThumbnailArr: Array = []; let formData = new FormData(); form.thumbnails.forEach(x => { tempThumbnailArr.push(x.file) }) formData.append("address", form.address); formData.append("location_type", form.location_type); formData.append("name", form.name); formData.append("regency_id", form.regency.id.toString()); formData.append("submitted_by", user.id.toString()); formData.append("google_maps_link", form.google_maps_link); for(let i = 0; i < tempThumbnailArr.length; i++) { formData.append("thumbnail", tempThumbnailArr[i]) } try { await createLocationService(formData) alert("Location Added") } catch(error) { console.log(error) } } function onChangeUploadImage(e: TargetedEvent) { e.preventDefault() let event = e.target as HTMLInputElement; const files = Array.from(event.files as ArrayLike); const result = files.filter((x) => { if (x.type === "image/jpg" || x.type === "image/png" || x.type === "image/jpeg") { return true } return false }).map(v => { let ret = { file: v, url: URL.createObjectURL(v) } return ret }) setForm({ ...form, thumbnails: result }) } function onDeleteSelectedThumbnail(e: TargetedEvent, idx: number) { e.preventDefault(); // remove image from FileList const dt = new DataTransfer(); const tempInput = document.getElementById('imageUpload')!; const input = tempInput as HTMLInputElement; const { files } = input; for (let i = 0; i < files!.length; i++) { const file = files![i] if (idx !== i) dt.items.add(file) } input.files = dt.files let thumbnails = form.thumbnails.filter((_, index) => index != idx); setForm({ ...form, thumbnails: thumbnails }) } function onChangeFormInput(e: ChangeEvent) { let event = e.target as HTMLInputElement; setForm({ ...form, [event.name]: event.value }) } function onDeleteAllThumbnails(e: TargetedEvent) { e.preventDefault(); const dt = new DataTransfer(); const tempInput = document.getElementById('imageUpload'); const input = tempInput as HTMLInputElement; dt.items.clear(); input.files = dt.files setForm({ ...form, thumbnails: [] }) } function onChangeRegencyDropdownInput(val: Regency) { setPageState({ ...pageState, regency_form_error: false }) setForm({ ...form, regency: val }) } useEffect(() => { getRecentLocations() getRegions() }, []) return (

Add New Location

Location Name * Address * Kota / Kabupaten * (regency mustn't be empty) onChangeRegencyDropdownInput(val)} labelPropsName={"regency_name"} options={idnRegions.regencies!} placeholder={''} /> Google Maps Link * Thumbnails
{form.thumbnails.length > 0 && form.thumbnails.map((x, idx) => ( )) } {form.thumbnails.length > 0 && Delete All Thumbnails } NOTE: LOCATION SUBMISSION MAY BE EDITED BY MODERATOR SO DON'T PUT STUPID ASS THUMBNAILS YOU 1 CENT DOORKNOB

Recently added locations

{recentLocations?.map(x => ( ))}
) } export default AddLocation;