Get back to active!. I hope this library will be useful for all you guy. Welcome all PR as always. Thanks.
thai-address-autocomplete-react is an input component for ReactJS that can auto-complete Thai addresses with magic by just typing something. Anyway I hope this component will be a useful thing to you. :D Happy Coding.
npm install thai-address-autocomplete-react
# or just `yarn add thai-address-autocomplete-react`import { useState } from "react";
import { Address, CreateInput } from "thai-address-autocomplete-react";
const InputThaiAddress = CreateInput();
const App = () => {
  const [address, setAddress] = useState<Address>({
    district: "", // ตำบล tambol
    amphoe: "", // อำเภอ amphoe
    province: "", // จังหวัด changwat
    zipcode: "", // รหัสไปรษณีย์ postal code
  });
  const handleChange = (scope: string) => (value: string) => {
    setAddress((oldAddr: Address) => ({
      ...oldAddr,
      [scope]: value,
    }));
  };
  const handleSelect = (address: Address) => {
    setAddress(address);
  };
  return (
    <div>
      <label>ตำบล</label>
      <InputThaiAddress.District
        value={address["district"]}
        onChange={handleChange("district")}
        onSelect={handleSelect}
      />
      <label>อำเภอ</label>
      <InputThaiAddress.Amphoe
        value={address["amphoe"]}
        onChange={handleChange("amphoe")}
        onSelect={handleSelect}
      />
      <label>จังหวัด</label>
      <InputThaiAddress.Province
        value={address["province"]}
        onChange={handleChange("province")}
        onSelect={handleSelect}
      />
      <label>รหัสไปรษณีย์</label>
      <InputThaiAddress.Zipcode
        value={address["zipcode"]}
        onChange={handleChange("zipcode")}
        onSelect={handleSelect}
      />
    </div>
  );
};
export default App;| Data label | Data field name | 
|---|---|
| ตำบล/แขวง | district | 
| อำเภอ/เขต | amphoe | 
| จังหวัด | province | 
| รหัสไปรษณีย์ | zipcode | 
| Property | Description | Type | Default | 
|---|---|---|---|
| scope | field name from record. Possible value will be "district", "amphoe", "province", and "zipcode". | string | "province" | 
| delimiter | delimiter between scope values, which will show inside options in the autocomplete. | string | ", " | 
| value | value by scope. | string | "" | 
| filter | array filter function, used for fine grain result of options or fixed something on the result. | (value?: Address, index?: number, array?: Address[]) => boolean | () => true | 
| onChange | function callback, trigger on input changes. | (value: string) => void | () => null | 
| onSelect | function callback, trigger on select the option. | (address: Address) => void | () => null | 
| style | "Fashions fade, style is eternal." — Yves Saint Laurent | CSS.Properties | {} | 
| className | css class...name. | string | "" | 
| autoCompleteProps | the override properties of AutoComplete: check out https://ant.design/components/auto-complete#api. | 
AutoCompleteProps | {} | 
the data record can be found
onSelect.
interface Address {
  district: string;
  amphoe: string;
  province: string;
  zipcode: number;
}- Example Project: ./example
 - more Document: ./docs
 - Online Demo: Demo
 - or Online Editor (JavaScript): StackBlitz
 - or Online Editor (TypeScript): StackBlitz
 
FAQ 1: Can I use custom database ?
Yes, but to use custom database (in this version). It supports only JSON format file that output from Database Tools by earthchie.
// 1. import json
import customDB from "./database/db.json";
// 2. used by put in the configuration before initialize component
const InputCustom = CreateInput({ database: customDB });FAQ 2: I want to ask you more.
I provide a simple document on ./docs to describe how to use this library.
But if you're not found what you want to know, please feel free to create an issue on GitHub. I would love to answer all of the questions, and I am also welcome for all the PR. ❤️
Please see more CHANGELOG.md
MIT © buildingwatsize