Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions app.config.timestamp_1742289695505.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// app.config.ts
import { defineConfig } from "@solidjs/start/config";
import { configDefaults } from "vitest/config";
import autoprefixer from "autoprefixer";
import solidSvg from "vite-plugin-solid-svg";
var app_config_default = defineConfig({
server: {
preset: "aws-lambda",
inlineDynamicImports: true
},
vite: {
assetsInclude: ["**/*.md"],
plugins: [
solidSvg()
],
css: {
postcss: {
plugins: [autoprefixer({})]
}
},
test: {
exclude: [...configDefaults.exclude, "cdk/*"],
environment: "jsdom",
globals: true,
setupFiles: ["node_modules/@testing-library/jest-dom/vitest"],
isolate: false
}
},
middleware: "./src/middleware/index.ts"
});
export {
app_config_default as default
};
33 changes: 33 additions & 0 deletions app.config.timestamp_1742289695514.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// app.config.ts
import { defineConfig } from "@solidjs/start/config";
import { configDefaults } from "vitest/config";
import autoprefixer from "autoprefixer";
import solidSvg from "vite-plugin-solid-svg";
var app_config_default = defineConfig({
server: {
preset: "aws-lambda",
inlineDynamicImports: true
},
vite: {
assetsInclude: ["**/*.md"],
plugins: [
solidSvg()
],
css: {
postcss: {
plugins: [autoprefixer({})]
}
},
test: {
exclude: [...configDefaults.exclude, "cdk/*"],
environment: "jsdom",
globals: true,
setupFiles: ["node_modules/@testing-library/jest-dom/vitest"],
isolate: false
}
},
middleware: "./src/middleware/index.ts"
});
export {
app_config_default as default
};
14 changes: 11 additions & 3 deletions src/client/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,14 @@ export async function fetchLocation(locationsId: number) {

async function fetchSensorMeasurementsDownload(
sensorsId: number,
rollup: string,
datetimeFrom: string,
datetimeTo: string,
limit: number
) {
'use server';
const url = new URL(import.meta.env.VITE_API_BASE_URL);
url.pathname = `/v3/sensors/${sensorsId}/measurements`;
url.pathname = `/v3/sensors/${sensorsId}/${rollup}`;
url.search = `?datetime_from=${datetimeFrom.replace(
' ',
'%2b'
Expand All @@ -53,13 +54,14 @@ async function fetchSensorMeasurementsDownload(

async function fetchSensorMeasurements(
sensorsId: number,
rollup: string,
datetimeFrom: string,
datetimeTo: string,
limit: number
limit?: number
) {
'use server';
const url = new URL(import.meta.env.VITE_API_BASE_URL);
url.pathname = `/v3/sensors/${sensorsId}/hours`;
url.pathname = `/v3/sensors/${sensorsId}/${rollup}`;
url.search = `?datetime_from=${datetimeFrom.replace(
' ',
'%2b'
Expand Down Expand Up @@ -117,16 +119,20 @@ async function fetchProviders() {
return await res.json();
}

type rollup = 'measurements' | 'hours' | 'days' | 'years';

export const getSensorMeasurements = GET(
async (
sensorsId: number,
rollup: rollup,
datetimeFrom: string,
datetimeTo: string,
limit: number = 1000
) => {
'use server';
const data = await fetchSensorMeasurements(
sensorsId,
rollup,
datetimeFrom,
datetimeTo,
limit
Expand All @@ -138,13 +144,15 @@ export const getSensorMeasurements = GET(
export const getSensorMeasurementsDownload = GET(
async (
sensorsId: number,
rollup: string,
datetimeFrom: string,
datetimeTo: string,
limit: number = 1000
) => {
'use server';
const data = await fetchSensorMeasurementsDownload(
sensorsId,
rollup,
datetimeFrom,
datetimeTo,
limit
Expand Down
17 changes: 14 additions & 3 deletions src/components/DownloadCard/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -133,25 +133,29 @@ export function DownloadCard(props: Props) {
e.preventDefault();
setDownloading(true);
const formElements = e.target.elements;
const tz = formElements[0].value;
const dateFromValue = formElements[1].value;
const dateToValue = formElements[2].value;
const rollup = formElements[0].value;
const tz = formElements[1].value;
const dateFromValue = formElements[2].value;
const dateToValue = formElements[3].value;
const sensorInputs = [...formElements]
.filter((o) => o.id.includes('checkbox-sensor'))
.filter((o) => o.checked);
const sensorIds = sensorInputs.map((o) =>
Number(o.id.replace('checkbox-sensor-', ''))
);
let data = [];

for (const sensorId of sensorIds) {
const measurements = await getSensorMeasurementsDownload(
sensorId,
rollup,
dayjs(new Date(dateFromValue), props.timezone).toISOString(),
dayjs(new Date(dateToValue), props.timezone).toISOString()
);
data = data.concat(measurements);
await sleep(300);
}

const csvData = measurementsCsv(props, data);
downloadFile(`openaq_location_${props.id}_measurments.csv`, csvData);
setDownloading(false);
Expand Down Expand Up @@ -180,6 +184,13 @@ export function DownloadCard(props: Props) {
onFormSubmit(e);
}}
>
<label for="">Data type</label>
Comment thread
RebeckaGothlin marked this conversation as resolved.
<select id="select" class="date-input">
<option value="measurements">Measurements</option>
<option value="hours">Hourly averages</option>
<option value="days">Daily averages</option>
<option value="years">Yearly averages</option>
</select>
<input type="hidden" name="timezone" value={props.timezone} />
<label for="">Start date</label>
<input
Expand Down