diff --git a/web/src/components/measure-config/MeasureConfigForm.vue b/web/src/components/measure-config/MeasureConfigForm.vue
index a11a3d7..8bb5e24 100644
--- a/web/src/components/measure-config/MeasureConfigForm.vue
+++ b/web/src/components/measure-config/MeasureConfigForm.vue
@@ -2,12 +2,18 @@
diff --git a/web/src/components/measure-config/measure-config-form.ts b/web/src/components/measure-config/measure-config-form.ts
index 1f7ab20..e722693 100644
--- a/web/src/components/measure-config/measure-config-form.ts
+++ b/web/src/components/measure-config/measure-config-form.ts
@@ -1,10 +1,17 @@
-import { Component, Prop, Vue, Watch } from 'vue-property-decorator';
+import { Component, Emit, Prop, Vue, Watch } from 'vue-property-decorator';
import { logService } from '@/services/logging';
import { Measure, MeasureConfig, MeasureType } from '@/models';
@Component({})
export class MeasureConfigForm extends Vue {
- @Prop({}) public config!: MeasureConfig;
+ @Prop({}) public value!: MeasureConfig;
+ @Prop({}) public disabled: boolean = false;
+
+ @Watch('value', { immediate: true, deep: true })
+ @Emit('input')
+ private onConfigChanged(newVal: MeasureConfig, oldVal: MeasureConfig) {
+ return newVal;
+ }
}
export default MeasureConfigForm;
diff --git a/web/src/main.ts b/web/src/main.ts
index 35369f8..0a325ee 100644
--- a/web/src/main.ts
+++ b/web/src/main.ts
@@ -5,6 +5,7 @@ import App from './App.vue';
import { store } from './store';
import router from './router';
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
+import { dom as FA_DOM} from '@fortawesome/fontawesome-svg-core';
import SmartTable from 'vuejs-smart-table';
import ApexChart from 'vue-apexcharts';
@@ -13,6 +14,8 @@ import './registerServiceWorker';
import { logService, LogLevel, ApiLogAppender, ConsoleLogAppender } from '@/services/logging';
Vue.component('fa-icon', FontAwesomeIcon);
+FA_DOM.watch();
+
Vue.component('apex-chart', ApexChart);
Vue.use(SmartTable);
diff --git a/web/src/services/pm-api-client.ts b/web/src/services/pm-api-client.ts
index f3f603e..816fd87 100644
--- a/web/src/services/pm-api-client.ts
+++ b/web/src/services/pm-api-client.ts
@@ -114,7 +114,7 @@ export class PmApiClient {
}
public async createMeasure(measure: Measure): Promise> {
- const resp = await this.http.post(`/measures`);
+ const resp = await this.http.post(`/measures`, measure);
return resp.data;
}
diff --git a/web/src/store-modules/measure.ts b/web/src/store-modules/measure.ts
index 7afeaed..d6351e4 100644
--- a/web/src/store-modules/measure.ts
+++ b/web/src/store-modules/measure.ts
@@ -24,6 +24,14 @@ export class MeasureStoreModule extends VuexModule {
public async fetchMeasure(slug: string) {
const measure = api.getMeasure(slug);
this.context.commit('SET_MEASURE', measure);
+ return measure;
+ }
+
+ @Action({ rawError: true })
+ public async createMeasure(m: Measure) {
+ const newMeasure = await api.createMeasure(m);
+ this.context.commit('SET_MEASURE', newMeasure);
+ return newMeasure;
}
@Mutation private SET_MEASURE(measure: Measure) {
diff --git a/web/src/styles/ui-common.scss b/web/src/styles/ui-common.scss
index ed8e4d0..bc0d4c0 100644
--- a/web/src/styles/ui-common.scss
+++ b/web/src/styles/ui-common.scss
@@ -6,6 +6,7 @@
border-radius: .25em;
cursor: pointer;
font-family: $body-font;
+ font-size: inherit;
font-weight: bold;
padding: .5em 1em;
@@ -15,12 +16,21 @@
.btn-action {
background-color: $color2;
color: $color3;
+ cursor: pointer;
position: relative;
&:hover {
background-color: darken($color2, 5%);
}
+}
+.form-waiting .wait-spinner {
+ border: solid thin $fg-primary;
+ border-radius: .25em;
+ cursor: wait;
+ font-family: $body-font;
+ font-size: inherit;
+ padding: .5em 1em;
}
a.btn,
@@ -43,8 +53,34 @@ a.btn-action { text-decoration: none; }
.main { flex-grow: 1; }
+form {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+
+ label {
+ display: inline-block;
+ margin: .5rem 0;
+ min-width: 10em;
+ }
+
+ select { background-color: white; }
+
+ .form-actions,
+ .form-waiting {
+ display: flex;
+ flex-direction: row-reverse;
+ }
+}
+
input,
-select {
+select,
+textarea {
font-size: inherit;
padding: .35em .5em;
+
+ &:disabled { cursor: wait; }
}
+
+textarea { font-family: $body-font; }
+
diff --git a/web/src/views/NewMeasure.vue b/web/src/views/NewMeasure.vue
index f522f3c..fdcdacd 100644
--- a/web/src/views/NewMeasure.vue
+++ b/web/src/views/NewMeasure.vue
@@ -4,34 +4,45 @@
New Measure
What do you want to measure?
-
diff --git a/web/src/views/UserAccount.vue b/web/src/views/UserAccount.vue
index 0ff3a1f..81de96b 100644
--- a/web/src/views/UserAccount.vue
+++ b/web/src/views/UserAccount.vue
@@ -1,16 +1,19 @@
-