Skip to content

Commit

Permalink
feat: updated domain, geo search, geotiff (#80)
Browse files Browse the repository at this point in the history
* feat: added building element materials #56 (wip)

* feat: save building element materials #56

* fix: epfl push deploy action version added

* feat: more building element relations

* feat: display addresses

* fix: styling

* feat: search docs within a bounding box

* fix: reset bounding box on search page display

* fix: map features not depending on bbox filter

* fix: no results position

* feat: heatmap added using titiler (wip)

* feat: added toggle to show/hide heatmap of straw fields
  • Loading branch information
ymarcon authored Feb 13, 2025
1 parent ccbae2b commit 35422d5
Show file tree
Hide file tree
Showing 31 changed files with 1,175 additions and 79 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ env:
IMAGE_NAME: ${{github.repository}}
jobs:
deploy:
uses: EPFL-ENAC/epfl-enac-build-push-deploy-action/.github/workflows/deploy.yml@main
uses: EPFL-ENAC/epfl-enac-build-push-deploy-action/.github/workflows/deploy.yml@v2.2.0
secrets:
token: ${{ secrets.CD_TOKEN }}
with:
Expand Down
20 changes: 18 additions & 2 deletions admin/src/components/BuildingDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@
<div class="text-bold q-mb-sm">{{ $t('building_elements') }}</div>
<q-card flat bordered class="bg-grey-2">
<q-card-section class="q-pa-none">
<div v-if="buildingElements?.length === 0" class="text-help q-pa-md">
<div v-if="buildingElements?.length === 0" class="text-help q-pt-sm q-pr-md q-pl-md">
{{ $t('no_building_elements') }}
</div>
<q-list separator>
Expand Down Expand Up @@ -333,7 +333,22 @@ async function onSave() {
delete selected.value.professionals;
selected.value.professional_ids = professionals.value;
delete selected.value.building_elements;
selected.value.building_elements = buildingElements.value;
if (buildingElements.value) {
selected.value.building_elements = buildingElements.value.map((be) => {
return {
...be,
materials:
be.materials
?.filter((m) => m.building_material_id !== undefined && (m.distance || m.weight))
.map((m) => {
return {
...m,
building_element_id: be.id,
};
}) || [],
};
});
}
if (selected.value.id) {
service
.update(selected.value.id, selected.value)
Expand Down Expand Up @@ -379,6 +394,7 @@ function onAddBuildingElement() {
building_id: selected.value.id,
technical_construction_id: undefined,
professional_ids: [],
materials: [],
});
}
Expand Down
56 changes: 56 additions & 0 deletions admin/src/components/BuildingElementForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
clearable
:label="$t('technical_construction')"
:hint="$t('building_element_technical_construction_used_hint')"
@update:model-value="onTechnicalConstructionChange"
/>
</div>
<div class="col">
Expand All @@ -27,6 +28,42 @@
/>
</div>
</div>
<div v-if="entity.technical_construction_id">
<div class="text-bold q-mt-md q-mb-xs">{{ $t('building_element_materials') }}</div>
<div class="text-hint q-mb-sm">{{ $t('building_element_materials_hint') }}</div>
<q-card flat bordered class="bg-white">
<q-card-section class="q-pa-none">
<div v-if="entity.materials?.length === 0" class="text-help q-pt-sm q-pr-md q-pl-md">
{{ $t('no_building_element_materials') }}
</div>
<q-list separator>
<q-item v-for="(mat, index) in entity.materials" :key="index">
<q-item-section>
<building-element-material-form
v-if="entity.materials"
v-model="entity.materials[index]"
:technical-contruction-id="entity.technical_construction_id"
/>
</q-item-section>
<q-item-section side>
<q-btn
rounded
dense
flat
color="grey-6"
:title="$t('delete')"
icon="delete"
@click="onRemoveBuildingElementMaterial(index)"
/>
</q-item-section>
</q-item>
</q-list>
</q-card-section>
<q-card-actions class="q-pa-md">
<q-btn color="secondary" icon="add" size="sm" @click="onAddBuildingElementMaterial" />
</q-card-actions>
</q-card>
</div>
</div>
</template>

Expand All @@ -38,6 +75,7 @@ export default defineComponent({
<script setup lang="ts">
import { BuildingElement } from 'src/models';
import { Option } from './models';
import BuildingElementMaterialForm from './BuildingElementMaterialForm.vue';
interface Props {
modelValue: BuildingElement;
Expand All @@ -53,6 +91,24 @@ watch(
() => props.modelValue,
(value) => {
entity.value = value;
if (!entity.value.materials) {
entity.value.materials = [];
}
},
);
function onRemoveBuildingElementMaterial(index: number) {
entity.value.materials?.splice(index, 1);
}
function onAddBuildingElementMaterial() {
if (!entity.value.materials) {
entity.value.materials = [];
}
entity.value.materials.push({});
}
function onTechnicalConstructionChange() {
entity.value.materials = [];
}
</script>
99 changes: 99 additions & 0 deletions admin/src/components/BuildingElementMaterialForm.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
<template>
<div>
<q-select
filled
v-model="entity.building_material_id"
:options="buildingMaterialsOptions"
map-options
emit-value
clearable
:label="$t('building_material')"
:hint="$t('building_element_building_material_used_hint')"
class="q-mb-md"
@update:model-value="onBuildingMaterialChange"
/>
<div class="row q-col-gutter-lg">
<div class="col">
<q-input
v-model.number="entity.distance"
type="number"
filled
min="0"
:disable="!entity.building_material_id"
:label="$t('distance')"
:hint="$t('building_element_building_material_distance_hint')"
/>
</div>
<div class="col">
<q-input
v-model.number="entity.weight"
type="number"
filled
min="0"
:disable="!entity.building_material_id"
:label="$t('weight')"
:hint="$t('building_element_building_material_weight_hint')"
/>
</div>
</div>
</div>
</template>

<script lang="ts">
export default defineComponent({
name: 'BuildingElementMaterialForm',
});
</script>
<script setup lang="ts">
import { BuildingElementMaterial, TechnicalConstruction } from 'src/models';
import { OptionNumber } from './models';
const services = useServices();
const tcService = services.make('technical-construction');
interface Props {
modelValue: BuildingElementMaterial;
technicalContructionId: number;
}
const props = defineProps<Props>();
const entity = ref(props.modelValue);
const buildingMaterialsOptions = ref<OptionNumber[]>([]);
onMounted(() => {
initBuildingMaterialsOptions();
});
watch([() => props.modelValue, () => props.technicalContructionId], () => {
entity.value = props.modelValue;
initBuildingMaterialsOptions();
});
function initBuildingMaterialsOptions() {
buildingMaterialsOptions.value = [];
if (!props.technicalContructionId) {
return;
}
tcService.get(props.technicalContructionId).then((response: TechnicalConstruction) => {
buildingMaterialsOptions.value =
response.building_materials?.map(
(bm) =>
({
label: bm.name,
value: bm.id,
}) as OptionNumber,
) || [];
if (!entity.value.building_material_id) {
entity.value.building_material_id = buildingMaterialsOptions.value[0]?.value;
}
});
}
function onBuildingMaterialChange() {
if (entity.value.building_material_id === undefined) {
entity.value.distance = undefined;
entity.value.weight = undefined;
}
}
</script>
4 changes: 4 additions & 0 deletions admin/src/components/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ export interface Option {
level?: number;
selectable?: boolean;
}
export interface OptionNumber {
value: number;
label: string;
}

export interface Suggestions {
key: string;
Expand Down
9 changes: 9 additions & 0 deletions admin/src/i18n/en/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,16 @@ export default {
article_top_pro_hint: 'Bio/history.',
article_top_tc_hint: 'Background and manufacturing.',
article_top: 'Article (top)',
building_element_materials: 'Materials used',
building_element_materials_hint: 'Provide some details about the materials used in this building element.',
building_element_building_material_distance_hint: 'Distance to fetch the building materials in kilometers.',
building_element_building_material_used_hint: 'Building material used in the selected technical construction.',
building_element_building_material_weight_hint: 'Weight of the building material in kilograms.',
building_building_material_used_hint: 'Building material used.',
building_element_professionals_hint: 'Professionals involved.',
building_element_technical_construction_used_hint: 'Technical construction used.',
building_elements: 'Building elements',
building_material: 'Building material',
building_material_constituants_hint: 'Building material are made of natural resources.',
building_material_constituants: 'Building material constituants',
building_materials: 'Building materials',
Expand All @@ -75,6 +81,7 @@ export default {
diffusivity_hint: 'D, *10^-6*m2/s',
diffusivity: 'Diffusivity',
dimension: 'Dimension',
distance: 'Distance',
drop_index: 'Drop index',
edit: 'Edit',
effusivity_hint: 'E, W*sqrt(h)/(m2*K)',
Expand Down Expand Up @@ -117,6 +124,7 @@ export default {
natural_resource_constituants: 'Natural resources constituants',
natural_resources: 'Natural resources',
no_building_elements: 'No building elements',
no_building_element_materials: 'No materials information',
no_results: 'No results',
other: 'Other',
other_addresses: 'Other addresses',
Expand Down Expand Up @@ -176,6 +184,7 @@ export default {
vapor_diffusion_resistance_hint: 'µ',
vapor_diffusion_resistance: 'Water vapor diffusion resistance',
website: 'Website',
weight: 'Weight',
write: 'Write',
year_of_construction: 'Year of construction',
youngs_modulus_hint: 'E, Mpa',
Expand Down
9 changes: 9 additions & 0 deletions admin/src/i18n/fr/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,16 @@ export default {
article_top_pro_hint: 'Bio/histoire.',
article_top_tc_hint: 'Origine et fabrication.',
article_top: 'Article (haut)',
building_element_materials: 'Matériaux utilisés',
building_element_materials_hint: 'Fournir des détails sur les matériaux utilisés dans cet élément de bâtiment.',
building_building_material_used_hint: 'Matériaux de construction utilisés.',
building_element_professionals_hint: 'Professionnels impliqués dans la construction.',
building_element_technical_construction_used_hint: 'Constructions techniques utilisées.',
building_element_building_material_distance_hint: 'Distance pour obtenir les matériaux de construction en kilomètres.',
building_element_building_material_used_hint: 'Matériaux de construction utilisés dans la construction technique sélectionnée.',
building_element_building_material_weight_hint: 'Poids du matériau de construction en kilogrammes.',
building_elements: 'Éléments de bâtiment',
building_material: 'Matériau de construction',
building_material_constituants_hint: 'Les matériaux de construction sont fabriqués à partir de ressources naturelles.',
building_material_constituants: 'Matériaux de construction constituants',
building_materials: 'Matériaux de construction',
Expand All @@ -59,6 +65,7 @@ export default {
description_tc_hint: 'Description générale, principales propriétés et utilisations.',
description: 'Description',
dimension: 'Dimension',
distance: 'Distance',
drop_index: "Supprimer l'index",
edit: 'Editer',
email: 'Courriel',
Expand Down Expand Up @@ -94,6 +101,7 @@ export default {
name: 'Nom',
natural_resource_constituants: 'Ressources naturelles constituants',
natural_resources: 'Ressources naturelles',
no_building_element_materials: "Pas d'information sur les matériaux",
no_building_elements: 'Aucun élément de bâtiment',
no_results: 'Aucun résultat',
other: 'Autre',
Expand Down Expand Up @@ -136,6 +144,7 @@ export default {
vapor_diffusion_resistance_hint: 'µ',
vapor_diffusion_resistance: "Resistance à la diffusion de vapeur d'eau",
website: 'Site web',
weight: 'Poids',
write: 'Ecrire',
year_of_construction: 'Année de construction',
zone: 'Zone',
Expand Down
11 changes: 11 additions & 0 deletions admin/src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,22 @@ export interface TechnicalConstruction extends PhysicalEntity {
building_material_ids?: number[];
}

export interface BuildingElementMaterial {
id?: number;
distance?: number;
weight?: number;

// draft
building_element_id?: number;
building_material_id?: number;
}

export interface BuildingElement {
id?: number;
building?: Building;
technical_construction?: TechnicalConstruction;
professionals?: Professional[];
materials?: BuildingElementMaterial[];

// draft
building_id?: number;
Expand Down
Loading

0 comments on commit 35422d5

Please sign in to comment.