Skip to content

Commit 9e7df9e

Browse files
Merge pull request #79 from Geode-solutions/feat/improve_imports
Feat/improve imports
2 parents 1cc374e + ff151f8 commit 9e7df9e

23 files changed

+4154
-2137
lines changed

components/Errors/Banner.vue

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
position="fixed"
77
>
88
<v-row>
9-
<v-col cols="auto" class="white--text text-center">
9+
<v-col cols="auto" class="text-white text-center">
1010
<v-tooltip location="end">
1111
<span>
1212
We turn off our server automatically after 5 minutes of inactivity
@@ -18,22 +18,22 @@
1818
</template>
1919
</v-tooltip>
2020
</v-col>
21-
<v-col cols="auto" class="text-white font-weight-bold"
22-
>Server timed out due to inactivity, please reload this page or click
21+
<v-col cols="auto" class="text-white font-weight-bold">
22+
Server timed out due to inactivity, please reload this page or click
2323
here:
2424
</v-col>
25-
<v-col cols="auto" align-items="center">
26-
<v-btn @click="reload()" color="grey" density="compact"> Reload </v-btn>
25+
<v-col class="align-items" cols="auto">
26+
<v-btn color="grey" density="compact" @click="reload()"> Reload </v-btn>
2727
</v-col>
2828
<v-spacer />
2929
<v-col cols="auto">
3030
<v-btn
3131
icon
32-
flat
32+
variant="flat"
3333
size="20"
34-
@click="errors_store.delete_server_error()"
3534
color="grey"
3635
class=".align-center"
36+
@click="errors_store.delete_server_error()"
3737
>
3838
<v-icon icon="mdi-close" size="20" color="white" />
3939
</v-btn>

components/Errors/Snackers.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template>
22
<v-snackbar
3-
:style="{ 'margin-bottom': calc_margin(index) }"
43
v-for="(error, index) in errors"
54
:key="index"
65
v-model="show"
6+
:style="{ 'margin-bottom': calc_margin(index) }"
77
color="error"
88
location="bottom right"
99
transition="slide-x-reverse-transition"
@@ -42,10 +42,10 @@
4242
<v-col cols="auto">
4343
<v-btn
4444
icon
45-
flat
45+
variant="flat"
4646
size="20"
47-
@click="errors_store.delete_error(index)"
4847
color="error"
48+
@click="errors_store.delete_error(index)"
4949
>
5050
<v-icon icon="mdi-close" size="20" color="white" />
5151
</v-btn>

components/FileUploader.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@
1818
<v-row>
1919
<v-col cols="auto">
2020
<v-btn
21-
@click="upload_files"
2221
color="primary"
2322
:disabled="!files.length && !files_uploaded"
2423
:loading="loading"
2524
class="pa-2"
26-
>Upload file(s)</v-btn
25+
@click="upload_files"
2726
>
27+
Upload file(s)
28+
</v-btn>
2829
</v-col>
2930
</v-row>
3031
</template>

components/Launcher.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<template>
2-
<v-container justify="space-around">
2+
<v-container class="justify">
33
<v-row align-content="center" align="center">
44
<v-col
55
v-if="!is_captcha_validated"
6+
class="align"
67
cols="12"
78
align-self="center"
8-
align="center"
99
>
1010
<h4 class="pb-3">Please complete the recaptcha to launch the app</h4>
1111
<Recaptcha :site_key="site_key" />
@@ -18,7 +18,7 @@
1818
</template>
1919

2020
<script setup>
21-
const websocket_store = use_websocket_store()
21+
const viewer_store = use_viewer_store()
2222
const cloud_store = use_cloud_store()
2323
const { is_captcha_validated, is_connexion_launched, is_running } =
2424
storeToRefs(cloud_store)
@@ -28,7 +28,7 @@
2828
watch(is_captcha_validated, async (value) => {
2929
if (value === true && process.client) {
3030
await cloud_store.create_connexion()
31-
await websocket_store.ws_connect()
31+
await viewer_store.ws_connect()
3232
}
3333
})
3434
</script>

components/Recaptcha.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
<vue-recaptcha
44
ref="recaptcha"
55
sitekey="6Lce72wgAAAAAOXrHyDxRQBhk6NDTD80MrXOlgbC"
6-
:loadRecaptchaScript="true"
6+
:load-recaptcha-script="true"
7+
align-self="center"
78
@expired="is_captcha_validated = false"
89
@verify="submit_recaptcha"
9-
align-self="center"
1010
/>
1111
</ClientOnly>
1212
</template>

components/RemoteRenderingView.vue

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,38 @@
33
<div style="position: relative; width: 100%; height: 100%">
44
<view-toolbar />
55
<v-col
6+
ref="viewer"
67
style="
78
overflow: hidden;
89
position: relative;
910
z-index: 0;
1011
height: 100%;
1112
width: 100%;
1213
"
13-
ref="viewer"
14+
class="pa-0"
1415
@click="get_x_y"
1516
@keydown.esc="app_store.toggle_picking_mode(false)"
16-
class="pa-0"
17-
>
18-
</v-col>
17+
/>
1918
</div>
2019
</ClientOnly>
2120
</template>
2221

2322
<script setup>
2423
import vtkRemoteView from "@kitware/vtk.js/Rendering/Misc/RemoteView"
2524
import { useElementSize } from "@vueuse/core"
25+
import schemas from "@/utils/schemas.json"
2626
2727
const viewer_store = use_viewer_store()
28-
const { picking_mode } = storeToRefs(viewer_store)
29-
const websocket_store = use_websocket_store()
30-
const { client, is_running } = storeToRefs(websocket_store)
28+
const { client, is_running, picking_mode } = storeToRefs(viewer_store)
3129
3230
function get_x_y(event) {
3331
if (picking_mode.value === true) {
3432
const { offsetX, offsetY } = event
3533
viewer_store.set_picked_point(offsetX, offsetY)
34+
viewer_call({
35+
schema: schemas.opengeodeweb_viewer.set_picked_point,
36+
params: { offsetX, offsetY },
37+
})
3638
}
3739
}
3840

components/ViewToolbar.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
Reset camera
66
<template #activator="{ props }">
77
<v-btn
8-
@click.stop="reset_camera"
98
density="comfortable"
109
v-bind="props"
1110
icon
11+
@click.stop="reset_camera"
1212
>
1313
<v-icon size="32"> mdi-cube-scan </v-icon>
1414
</v-btn>
@@ -19,9 +19,12 @@
1919
</template>
2020

2121
<script setup>
22-
const viewer_store = use_viewer_store()
22+
import schemas from "@/utils/schemas.json"
23+
2324
function reset_camera() {
24-
viewer_store.reset_camera()
25+
viewer_call({
26+
schema: schemas.opengeodeweb_viewer.reset_camera,
27+
})
2528
}
2629
</script>
2730

composables/api_fetch.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import Ajv from "ajv"
21
import _ from "lodash"
32

43
export function api_fetch(
@@ -10,22 +9,20 @@ export function api_fetch(
109

1110
const body = params || {}
1211

13-
const ajv = new Ajv()
12+
const { valid, error } = validate_schema(schema, body)
1413

15-
ajv.addKeyword("methods")
16-
ajv.addKeyword("route")
17-
ajv.addKeyword("max_retry")
18-
const valid = ajv.validate(schema, body)
1914
if (!valid) {
2015
errors_store.add_error({
2116
code: 400,
2217
route: schema.$id,
2318
name: "Bad request",
24-
description: ajv.errorsText(),
19+
description: error,
2520
})
26-
throw new Error(schema.$id.concat(": ", ajv.errorsText()))
21+
throw new Error(schema.$id.concat(": ", error))
2722
}
23+
2824
geode_store.start_request()
25+
2926
const method = schema.methods.filter((m) => m !== "OPTIONS")[0]
3027
const request_options = {
3128
method: method,

composables/viewer_call.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import _ from "lodash"
2+
3+
export function viewer_call(
4+
{ schema, params = {} },
5+
{ request_error_function, response_function, response_error_function } = {},
6+
) {
7+
console.log("viewer_call", schema.route, params)
8+
const errors_store = use_errors_store()
9+
const viewer_store = use_viewer_store()
10+
11+
const { valid, error } = validate_schema(schema, params)
12+
13+
if (!valid) {
14+
errors_store.add_error({
15+
code: 400,
16+
route: schema.route,
17+
name: "Bad request",
18+
description: error,
19+
})
20+
throw new Error(schema.route.concat(": ", error))
21+
}
22+
23+
const client = viewer_store.client
24+
25+
if (!_.isEmpty(schema.properties)) {
26+
params = [params]
27+
} else {
28+
params = []
29+
}
30+
31+
let promise = new Promise((resolve, reject) => {
32+
if (client) {
33+
viewer_store.start_request()
34+
client
35+
.getConnection()
36+
.getSession()
37+
.call(schema.rpc, params)
38+
.then(
39+
(value) => {
40+
if (response_function) {
41+
console.log("response_function", value)
42+
response_function(value)
43+
}
44+
resolve()
45+
},
46+
(reason) => {
47+
if (request_error_function) {
48+
console.log("request_error_function", reason)
49+
request_error_function(reason)
50+
}
51+
reject()
52+
},
53+
)
54+
.catch((error) => {
55+
console.log("error : ", error)
56+
errors_store.add_error({
57+
code: error.code,
58+
route: schema.route,
59+
name: error.data.message,
60+
description: error.data.exception,
61+
})
62+
if (response_error_function) {
63+
response_error_function(error)
64+
}
65+
reject()
66+
})
67+
.finally(() => {
68+
viewer_store.stop_request()
69+
})
70+
}
71+
})
72+
return promise
73+
}
74+
75+
export default viewer_call

0 commit comments

Comments
 (0)