From e9e3524b8e381e45a0a9c593f947344278865fd7 Mon Sep 17 00:00:00 2001 From: redhoyasa Date: Fri, 29 Oct 2021 13:31:03 +0700 Subject: [PATCH 1/3] use province name from the region API result instead of location API to undefined province error --- etc/fetchers/fetch-vaccination-database.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/fetchers/fetch-vaccination-database.ts b/etc/fetchers/fetch-vaccination-database.ts index c9590b31..c96851db 100644 --- a/etc/fetchers/fetch-vaccination-database.ts +++ b/etc/fetchers/fetch-vaccination-database.ts @@ -23,7 +23,7 @@ export async function fetchVaccinationDatabase() { fetch(`${vaksinId}/locations/${province}`) .then((res) => res.json() as unknown as VaccinationRegion) .then((region) => { - locations[region.data[0].province] = region.data.map((location) => ({ + locations[province] = region.data.map((location) => ({ id: `${region.data.findIndex( (index) => location.title === index.title, )}`, From 37b8362e335ac1216a442a7cbd8f1eb8b5dd0fed Mon Sep 17 00:00:00 2001 From: redhoyasa Date: Fri, 29 Oct 2021 15:47:17 +0700 Subject: [PATCH 2/3] replace Tempat vaksin data with data from vaccination db --- .../provinces/[provinceSlug]/index.test.tsx | 4 ++++ lib/data/__mocks__/builders/provinces.ts | 6 ++++- lib/data/__mocks__/builders/vaccination.ts | 24 +++++++++++++++++++ lib/data/__mocks__/provinces.ts | 13 +++++++++- lib/data/__mocks__/vaccination.ts | 7 ++++++ lib/data/vaccination.ts | 5 ++++ pages/provinces/[provinceSlug]/index.tsx | 8 +++++-- 7 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 lib/data/__mocks__/builders/vaccination.ts create mode 100644 lib/data/__mocks__/vaccination.ts diff --git a/__tests__/pages/provinces/[provinceSlug]/index.test.tsx b/__tests__/pages/provinces/[provinceSlug]/index.test.tsx index a6d724c5..c8d21c77 100644 --- a/__tests__/pages/provinces/[provinceSlug]/index.test.tsx +++ b/__tests__/pages/provinces/[provinceSlug]/index.test.tsx @@ -3,12 +3,14 @@ import React from "react"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import provinces from "~/lib/data/provinces"; +import vaccination from "~/lib/data/vaccination"; import ProvincePage, { getStaticPaths, getStaticProps, } from "~/pages/provinces/[provinceSlug]"; jest.mock("~/lib/data/provinces"); +jest.mock("~/lib/data/vaccination"); jest.mock("next/router", () => require("next-router-mock")); describe("ProvincePage", () => { @@ -104,6 +106,7 @@ describe("getStaticProps", () => { const [province] = provinces; const [unverifiedContact, verifiedContactBravo, verifiedContactAlpha] = province.data; + const [vaccinationContact] = vaccination["Province A"]; it("gets the provinceName and sorted contactList from the provinceSlug params", () => { expect( @@ -117,6 +120,7 @@ describe("getStaticProps", () => { contactList: [ verifiedContactAlpha, verifiedContactBravo, + vaccinationContact, unverifiedContact, ], }, diff --git a/lib/data/__mocks__/builders/provinces.ts b/lib/data/__mocks__/builders/provinces.ts index 5749bac8..bd53b225 100644 --- a/lib/data/__mocks__/builders/provinces.ts +++ b/lib/data/__mocks__/builders/provinces.ts @@ -20,7 +20,6 @@ export const contactBuilder = build({ "Pemakaman", "Puskesmas", "Rumah sakit", - "Tempat vaksin", "Tes swab", ), penyedia: fake((f) => f.company.companyName()), @@ -53,6 +52,11 @@ export const provinceBuilder = build({ penyedia: perBuild(() => "Alpha"), }, }), + contactBuilder({ + overrides: { + kebutuhan: perBuild(() => "Tempat vaksin"), + }, + }), ], }, }); diff --git a/lib/data/__mocks__/builders/vaccination.ts b/lib/data/__mocks__/builders/vaccination.ts new file mode 100644 index 00000000..e81dae50 --- /dev/null +++ b/lib/data/__mocks__/builders/vaccination.ts @@ -0,0 +1,24 @@ +import { build, fake } from "@jackfranklin/test-data-bot"; +import { sequence } from "@jackfranklin/test-data-bot/build"; +import { VaccinationContact } from "../../vaccination"; + +export const vaccinationContactBuilder = build({ + fields: { + id: sequence(), + slug: fake((f) => f.lorem.slug()), + kebutuhan: "Tempat vaksin", + penyedia: fake((f) => f.company.companyName()), + keterangan: fake((f) => f.commerce.productName()), + kontak: fake((f) => f.phone.phoneNumber()), + alamat: fake((f) => f.address.streetAddress()), + verifikasi: 1, + catatan_ketersediaan: fake((f) => f.lorem.sentence()), + rentang_umur: ["Dewasa (18-59 Tahun)", "Lansia (60-)"], + buka_waktu: "09:00:00", + tutup_waktu: "12:00:00", + mulai_tanggal: "2021-07-26", + selesai_tanggal: "2021-07-30", + map: "https://goo.gl/maps/L7BUJexFx3Fiy36bA", + link: fake((f) => f.internet.domainName()), + }, +}); diff --git a/lib/data/__mocks__/provinces.ts b/lib/data/__mocks__/provinces.ts index ddd27b34..5d0b6b65 100644 --- a/lib/data/__mocks__/provinces.ts +++ b/lib/data/__mocks__/provinces.ts @@ -1,5 +1,16 @@ import { provinceBuilder } from "./builders/provinces"; -const provinces = [provinceBuilder(), provinceBuilder()]; +const provinces = [ + provinceBuilder({ + overrides: { + name: "Province A", + }, + }), + provinceBuilder({ + overrides: { + name: "Province B", + }, + }), +]; export default provinces; diff --git a/lib/data/__mocks__/vaccination.ts b/lib/data/__mocks__/vaccination.ts new file mode 100644 index 00000000..15e3cd7f --- /dev/null +++ b/lib/data/__mocks__/vaccination.ts @@ -0,0 +1,7 @@ +import { vaccinationContactBuilder } from "./builders/vaccination"; + +const vaccination = Object.create({ + "Province A": [vaccinationContactBuilder()], + "Province B": [vaccinationContactBuilder()], +}); +export default vaccination; diff --git a/lib/data/vaccination.ts b/lib/data/vaccination.ts index d7b5e548..2f1b66b6 100644 --- a/lib/data/vaccination.ts +++ b/lib/data/vaccination.ts @@ -1,4 +1,5 @@ import { Contact } from "./provinces"; +import vaccination from "~/data/wbw-vaccination-database.json"; type City = `${"Kab." | "Kota"} ${string}`; type DateString = `${number}-${number}-${number}`; @@ -51,3 +52,7 @@ export interface VaccinationContact extends Contact { map: _location["map"]; link: _location["link"]; } + +export type Vaccination = { [province: string]: VaccinationContact[] }; + +export default vaccination as unknown as Vaccination; diff --git a/pages/provinces/[provinceSlug]/index.tsx b/pages/provinces/[provinceSlug]/index.tsx index f1446258..a15c98c6 100644 --- a/pages/provinces/[provinceSlug]/index.tsx +++ b/pages/provinces/[provinceSlug]/index.tsx @@ -8,6 +8,7 @@ import { SearchForm } from "~/components/search-form"; import { SeoText } from "~/components/seo-text"; import { getProvincesPaths } from "~/lib/data/helpers/provinces"; import provinces, { Contact } from "~/lib/data/provinces"; +import vaccination from "~/lib/data/vaccination"; import { getCurrentLongDate } from "~/lib/date-utils"; import { useSearch } from "~/lib/hooks/use-search"; import { getProvinceMeta } from "~/lib/meta"; @@ -124,8 +125,11 @@ export const getStaticProps: GetStaticProps = ({ params = {} }) => { const { provinceSlug } = params; const province = provinces.find((prov) => prov.slug === provinceSlug); const provinceName = province ? province.name : ""; - const contactList = province - ? [...province.data].sort((a, b) => { + const contacts = province?.data.filter( + (contact) => contact.kebutuhan !== "Tempat vaksin", + ); + const contactList = contacts + ? [...contacts, ...vaccination[provinceName]].sort((a, b) => { return ( b.verifikasi - a.verifikasi || (a.penyedia ?? "").localeCompare(b.penyedia ?? "") From 3f4674448a028fd8694a70df42bce006aa47244d Mon Sep 17 00:00:00 2001 From: redhoyasa Date: Fri, 29 Oct 2021 16:00:05 +0700 Subject: [PATCH 3/3] fill kebutuhan field for vaccination db --- etc/fetchers/fetch-vaccination-database.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/etc/fetchers/fetch-vaccination-database.ts b/etc/fetchers/fetch-vaccination-database.ts index c96851db..2dee6b8a 100644 --- a/etc/fetchers/fetch-vaccination-database.ts +++ b/etc/fetchers/fetch-vaccination-database.ts @@ -28,6 +28,7 @@ export async function fetchVaccinationDatabase() { (index) => location.title === index.title, )}`, keterangan: "Lokasi Vaksinasi COVID-19", + kebutuhan: "Tempat vaksin", lokasi: location.city, verifikasi: location.isvalid ? 1 : 0, penyedia: location.title,